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

Sady z jedné tabulky, seskupené podle sloupce

Tento problém ve skutečnosti vypadá jednodušeji než odpověď na otázku, kterou jste propojili, což je vynikající řešení tohoto problému. Nicméně toto používá stejné hierarchické dotazy s connect by

V případě, že priority je vždy souvislá posloupnost čísel, bude to fungovat

SELECT t.grp, level, ltrim(SYS_CONNECT_BY_PATH(state,','),',')   as "set"  
   from  t 
   start with priority = 1
 connect by   priority = prior priority + 1
            and grp = prior grp

Pokud to však není vždy pravda, vyžadovali bychom row_number() k definování sekvence na základě pořadí priority (které nemusí být po sobě jdoucí celé číslo)

with t2 AS
( 
  select t.*, row_number() 
        over ( partition by grp order by priority) as rn from t
)
SELECT t2.grp, ltrim(SYS_CONNECT_BY_PATH(state,','),',')   as "set"
   from  t2 
   start with priority = 1
 connect by   rn = prior rn + 1
            and grp = prior grp

DEMO



  1. Jak napsat MYSQL dotaz, který vrátí děti vnořené pod rodiči?

  2. Uložené procedury MySql:Jak vybrat z tabulky procedur?

  3. Jak mohu analyzovat data objektů z databáze MySQL pomocí PHP PDO?

  4. Hibernace vynutí trvalé časové razítko/načtení jako UTC