Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Zestawy z jednej tabeli, pogrupowane według kolumny

Ten problem w rzeczywistości wygląda na prostszy niż odpowiedź na pytanie, które połączyłeś, co jest doskonałym rozwiązaniem tego problemu. Niemniej jednak używa tych samych zapytań hierarchicznych, z connect by

Jeśli tak jest, priority jest zawsze ciągłą sekwencją liczb, to zadziała

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

Jeśli jednak nie zawsze tak jest, wymagalibyśmy row_number() aby zdefiniować sekwencję na podstawie kolejności priorytetów (która nie musi być kolejnymi liczbami całkowitymi)

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Wyrażenie regularne dla REGEXP_SUBSTR w Oracle

  2. Utwórz użytkownika ze zmiennych łańcuchowych w bloku PL/SQL

  3. Nie można załadować pliku lub zestawu dla Oracle.DataAccess w .NET

  4. Grupuj według, aby utworzyć pionową koalescencję

  5. Dlaczego czas wykonywania procedury składowanej Oracle jest znacznie wydłużony w zależności od sposobu jej wykonania?