Oracle
 sql >> Base de données >  >> RDS >> Oracle

Ensembles d'une seule table, regroupés par une colonne

Ce problème semble en fait plus simple que la réponse à la question que vous avez liée, ce qui est une excellente solution à ce problème. Néanmoins, cela utilise les mêmes requêtes hiérarchiques, avec connect by

Si c'est le cas que priority est toujours une séquence continue de nombres, cela fonctionnera

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

Cependant, si ce n'est pas toujours vrai, nous aurions besoin de row_number() pour définir la séquence en fonction de l'ordre de priorité (qui n'a pas besoin d'être un entier consécutif)

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

DÉMO