sql >> Base de Datos >  >> RDS >> Oracle

Conjuntos de una sola tabla, agrupados por una columna

Este problema en realidad parece más simple que la respuesta a la pregunta que vinculó, que es una excelente solución para ese problema. Sin embargo, esto usa las mismas consultas jerárquicas, con connect by

Si es el caso que priority es siempre una secuencia continua de números, esto funcionará

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

Sin embargo, si eso no siempre es cierto, requeriríamos row_number() para definir la secuencia según el orden de prioridad (que no necesita ser un número entero 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