Классифицировать данные с помощью sql

У меня есть данные в приведенном ниже формате в таблице состояния (newstat) с уникальным идентификатором идентификатора

  

 id status status1
----- 
 1 COMP ACC REQ 
 2 COMP DECL 
 3 ACR  ACC REQ 
 4 ACR  CANCEL 
 5 ACW     DECL  
 6 ACW     ACC REQ

.....

используя sql-запрос (oracle 11g), мне нужно, чтобы данные были во вложенном формате

  
 COMP    ACC REQ, DECL
 ACR     ACC REQ, CANCEL
 ACW     ACC REQ, DECL

я пробовал код, используя LISTAGG(), wm_concat

пытался использовать sql, но все они генерируют ошибки.

ORA-00904: "WM_CONCAT": неверный идентификатор


person 738560    schedule 12.08.2019    source источник
comment
Какая у вас точная версия оракула? select banner from v$version where banner like 'Oracle%'; расскажет вам. listagg() был введен в 11.2 — возможно, вы используете 11.1 — с 11.2 это определенно работает: /   -  person a_horse_with_no_name    schedule 13.08.2019


Ответы (1)


Разве это не работает?

select status, listagg(status1, ', ') within group (order by id) as statuses
from t
group by status
order by min(id);
person Gordon Linoff    schedule 12.08.2019
comment
Я пробовал аналогичный, включая этот. когда я запускаю этот запрос, я получаю ошибку ниже - ORA-01489: результат конкатенации строк слишком длинный - person 738560; 13.08.2019
comment
@ 738560 . . . Это другая ошибка. Вы не можете сделать именно то, что хотите, потому что данные не помещаются в нужный столбец. Вы можете использовать CLOB или найти способ сократить строку результата. - person Gordon Linoff; 13.08.2019