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

Sæt fra et enkelt bord, grupperet efter en kolonne

Dette problem ser faktisk enklere ud end svaret på det spørgsmål, du linkede til, hvilket er en glimrende løsning på det problem. Ikke desto mindre bruger dette de samme hierarkiske forespørgsler med connect by

Hvis det er tilfældet, at priority er altid en kontinuerlig række af tal, vil dette virke

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

Men hvis det ikke altid er sandt, vil vi kræve row_number() at definere sekvensen baseret på prioritetsrækkefølgen (som ikke behøver at være et fortløbende heltal)

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. indsæt hastighed i mysql vs cassandra

  2. pip install MySQL-python returnerer ude af stand til at finde vcvarsall.bat

  3. MySQL exit-handler ignoreret

  4. Bestem det næste tal i databaseforespørgslen med while loop i php