Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Sätze aus einer einzelnen Tabelle, gruppiert nach einer Spalte

Dieses Problem sieht tatsächlich einfacher aus als die Antwort auf die von Ihnen verlinkte Frage, die eine hervorragende Lösung für dieses Problem darstellt. Trotzdem verwendet dies dieselben hierarchischen Abfragen mit connect by

Wenn es der Fall ist, dass priority ist immer eine fortlaufende Zahlenfolge, das geht auch

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

Wenn dies jedoch nicht immer der Fall ist, benötigen wir row_number() um die Reihenfolge basierend auf der Prioritätsreihenfolge zu definieren (die keine fortlaufende ganze Zahl sein muss)

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