Oracle
 sql >> база данни >  >> RDS >> Oracle

Набори от една таблица, групирани по колона

Този проблем всъщност изглежда по-прост от отговора на въпроса, който сте свързали, което е отлично решение на този проблем. Независимо от това, това използва същите йерархични заявки, с connect by

Ако случаят е такъв, че priority винаги е непрекъсната последователност от числа, това ще работи

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

Ако обаче това не винаги е вярно, ще изискваме row_number() за дефиниране на последователността въз основа на реда на приоритет (който не е необходимо да бъде последователно цяло число)

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

ДЕМО



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Прегледайте списък с колони на таблица и приложете заявка към тях

  2. Изпълнение на оператор или изпълнение на скрипт?

  3. Кога трябва да използвам Index Organized Table на Oracle? Или кога не трябва?

  4. Java Date.toString в TO_DATE на Oracle

  5. Как да извикам java клас от oracle trigger?