Сиквел Альтернативное решение для коллекционирования - PullRequest
0 голосов
/ 12 сентября 2018

QUERY Now

CREATE TABLE collect_char_wk1 STORED AS ORC AS
SELECT cluster, COLLECT_SET(characteristic)
FROM timeperiod1
GROUP BY cluster;

ОБРАЗЕЦ ДАННЫХ

cluster  characteristic
 A        1
 A        2
 A        3
 B        2
 B        3

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

cluster  characteristic
 A        [1,2,3]
 B        [2,3]

В настоящее время это работает с вышеупомянутым запросом, но я хочу, чтобы он писал в sql или plsql, используя аналогичную функциональность, так как у нас нет collect_set в sql напрямую. Пожалуйста, дайте мне знать, если есть какой-либо способ сделать это? Спасибо

1 Ответ

0 голосов
/ 12 сентября 2018

Взгляните на Методы агрегации Oracle :

То, что вы ищете, это LISTAGG. Вот как это могло бы быть в вашем случае

select c1, LISTAGG(c2, ',') WITHIN GROUP (ORDER BY 1)  from (
     select      'A' c1,         1 c2 from dual union all
     select      'A' c1,2 c2 from dual union all
     select      'A' c1,3 c2 from dual union all
     select      'B' c1,2 c2 from dual union all
     select      'B' c1,3 c2 from dual 
) group by c1 ;

(обратите внимание, что это чистое SQL решение)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...