sql >> Databáze >  >> RDS >> Oracle

Kombinace z jedné tabulky, seskupené podle hodnoty sloupce

Můžete to udělat pomocí hierarchických dotazů – zde je jeden pomocí starého stylu 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 podmínka v klauzuli connect by je vyžadována, aby bylo zajištěno, že procházíme přes správné řádky (pokud byste ji vynechali, výsledek by obsahoval mnoho řádků navíc).

Vyloučil jsem řádky s pouze jedním stavem ve výstupu - kromě případů, kdy id uvádělo pouze jeden stav. Můžete nebo nemusíte chtít zahrnout jednotlivé stavy do výstupu, v takovém případě můžete predikáty zcela odstranit.




  1. Jak uložit soubor pdf do databáze postgresql pomocí servletů?

  2. T-SQL dotaz pro zobrazení definice tabulky?

  3. Maximální šířka sloupce ve frontě Oracle do souboru

  4. Cizí klíče odkazující na jiné cizí klíče v PostgreSQL