sql >> Database >  >> RDS >> Oracle

Sets uit een enkele tabel, gegroepeerd op een kolom

Dit probleem ziet er eigenlijk eenvoudiger uit dan het antwoord op de vraag die je hebt gelinkt, wat een uitstekende oplossing voor dat probleem is. Desalniettemin gebruikt dit dezelfde hiërarchische zoekopdrachten, met connect by

Als het zo is dat priority is altijd een doorlopende reeks getallen, dit zal werken

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

Als dat echter niet altijd waar is, hebben we row_number() . nodig om de reeks te definiëren op basis van de volgorde van prioriteit (die niet opeenvolgend geheel getal hoeft te zijn)

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



  1. Bij het aanroepen van DB::selecteer waarom krijg ik het bericht De verbinding is opnieuw ingesteld?

  2. Rails + Postgres:tijdzone-informatie op kolom uit samengevoegde tabel wordt niet geretourneerd

  3. Wat is de eenvoudigste manier om gegevens van een Java-programma op te slaan in MySQL?

  4. MySQL:een nieuwe tabel maken met informatie uit een query