Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Hubungan bersarang Oracle SQL menjadi satu level

Saya tidak yakin apakah saya sepenuhnya memahami logika yang Anda coba terapkan, tetapi inilah SQL yang membuat tabel Anda dan menduplikasi contoh output Anda. Itu diuji di https://livesql.Oracle.com

Harap ambil ini dengan sebutir garam karena jika data Anda mungkin memiliki baris atau siklus duplikat atau yang lainnya, yang tidak ditunjukkan dalam contoh Anda, kueri mungkin perlu dimodifikasi.

Garis Besar:

  1. Dalam klausa "with", kami memutar "ColumnA" dan "ColumnB" menjadi satu kolom, dan menambahkan col_src untuk mempertahankan "ColumnAB" yang baru.

  2. Kemudian kita melakukan query secara rekursif, menghubungkan dengan kolom D yang cocok dan kolom A/B yang cocok dengan kolom C sebelumnya.

  3. Untuk mencocokkan urutan yang disediakan, kami mengurutkan berdasarkan:

    • tingkat rekursi
    • kolom C
    • apakah sumbernya kolom A atau B
    • nilai kolom A atau B
create table mytable as
select 'A' "ColumnA",'B' "ColumnB",'C' "ColumnC",'E' "ColumnD" from dual
union select 'D' "ColumnA",'C' "ColumnB",'F' "ColumnC",'E' "ColumnD" from dual
union select 'C' "ColumnA",'H' "ColumnB",'I' "ColumnC",'E' "ColumnD" from dual
union select 'C' "ColumnA",'W' "ColumnB",'S' "ColumnC",'E1' "ColumnD" from dual
;

with temp as (
    select "ColumnA" as "ColumnAB", "ColumnC", "ColumnD", 'A' as col_src
    from mytable
    union all select "ColumnB", "ColumnC", "ColumnD", 'B' as col_src
    from mytable
)
select connect_by_root("ColumnAB") "ColumnV", "ColumnC" as "ColumnW" from temp
connect by prior "ColumnD" = "ColumnD" and prior "ColumnC" = "ColumnAB"
order by level,"ColumnC",col_src,  "ColumnAB"



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kapan saya harus menggunakan Tabel Terorganisir Indeks Oracle? Atau, kapan saya tidak boleh?

  2. Metode Pengaturan Parameter NLS dan Prioritasnya (Oracle Database)

  3. Batasan panjang minimum pada kolom

  4. Muat lembar data Excel ke database Oracle

  5. catatan duplikat perlu menghapus Oracle db