Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Conjuntos de uma única tabela, agrupados por uma coluna


Na verdade, esse problema parece mais simples do que a resposta para a pergunta que você vinculou, o que é uma excelente solução para esse problema. No entanto, isso usa as mesmas consultas hierárquicas, com connect by

Se for o caso de priority é sempre uma sequência contínua de números, isso 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

No entanto, se isso nem sempre for verdade, precisaríamos de row_number() para definir a sequência com base na ordem de prioridade (que não precisa ser um número inteiro 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