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

Kombinasi dari Satu Tabel, Dikelompokkan Berdasarkan Nilai Kolom

Anda dapat melakukannya menggunakan kueri hierarkis - ini adalah kueri yang menggunakan gaya lama connect by :

WITH your_table AS (SELECT 1 ID, 'AL' state FROM dual UNION ALL
                    SELECT 1 ID, 'AZ' state FROM dual UNION ALL
                    SELECT 1 ID, 'MI' state FROM dual UNION ALL
                    SELECT 2 ID, 'TX' state FROM dual UNION ALL
                    SELECT 2 ID, 'TN' state FROM dual UNION ALL
                    SELECT 2 ID, 'MO' state FROM dual UNION ALL
                    SELECT 2 ID, 'ND' state FROM dual UNION ALL
                    SELECT 3 ID, 'OH' state FROM dual)
SELECT ID,
       state,
       ltrim(SYS_CONNECT_BY_PATH(state, ','), ',') combinations,
       LEVEL
FROM   (SELECT id,
               state,
               count(*) OVER (PARTITION BY id) state_cnt
        FROM your_table)
WHERE  state_cnt = 1
OR     (state_cnt > 1 AND LEVEL > 1)
CONNECT BY PRIOR ID = ID
           AND PRIOR state < state
           AND PRIOR sys_guid() IS NOT NULL;

        ID STATE COMBINATIONS      LEVEL
---------- ----- ------------ ----------
         1 AZ    AL,AZ                 2
         1 MI    AL,AZ,MI              3
         1 MI    AL,MI                 2
         1 MI    AZ,MI                 2
         2 TX    TN,TX                 2
         2 TX    MO,TX                 2
         2 TN    MO,TN                 2
         2 TX    MO,TN,TX              3
         2 ND    MO,ND                 2
         2 TX    MO,ND,TX              3
         2 TN    MO,ND,TN              3
         2 TX    MO,ND,TN,TX           4
         2 TX    ND,TX                 2
         2 TN    ND,TN                 2
         2 TX    ND,TN,TX              3
         3 OH    OH                    1

prior sys_guid() is not null kondisi dalam klausa connect by diperlukan untuk memastikan kita mengulang baris yang benar (jika Anda menghilangkannya, hasilnya akan berisi banyak baris tambahan).

Saya telah mengecualikan baris dengan hanya satu status di output - kecuali jika id hanya mencantumkan satu status. Anda mungkin atau mungkin tidak ingin menyertakan satu status dalam output, dalam hal ini, Anda dapat menghapus predikat seluruhnya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Buat daftar semua bulan dari kolom tanggal di ORACLE SQL

  2. Memasukkan karakter arab di oracle 11g

  3. Tidak ditemukan driver yang cocok untuk jdbc:Oracle:thin:@localhost:1521:XE saat menjalankan aplikasi web

  4. Convert Select Oracle Query To Update untuk skenario tertentu

  5. Bagaimana cara memperbaiki Penyedia tidak kompatibel dengan versi klien Oracle?