Oracle
 sql >> Database >  >> RDS >> Oracle

Insiemi da una singola tabella, raggruppati per colonna

Questo problema in realtà sembra più semplice della risposta alla domanda che hai collegato, che è un'ottima soluzione a quel problema. Tuttavia, questo utilizza le stesse query gerarchiche, con connect by

Se è il caso che priority è sempre una sequenza continua di numeri, funzionerà

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

Tuttavia, se ciò non è sempre vero, avremmo bisogno di row_number() per definire la sequenza in base all'ordine di priorità (che non deve essere necessariamente intero consecutivo)

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