Как перечислить значения с помощью LISTAGG в запросе с множеством JOIN из различных таблиц?

Добрый день, имеется таблица к которой будет подключаться множество других таблиц через связь МНОГИЕ КО МНОГИМ.

Задача такая, чтобы вывести первую поля первой таблицы и значений связующих таблиц но каждое в своём поле через разделитель, т.е. как бы денормализовать информацию

Здесь можно наглядно увидеть проблему

sqlfiddle.com/#!4/9b70c/2

Результат получается такой

ID ; CPU_HASH ; MONITOR_HASH
1 ; 10, 10, 10 ; 5, 15, 25

А на самом деле хочу получить такой

ID ; CPU_HASH ; MONITOR_HASH
1 ; 10 ; 5, 15, 25
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
SELECT report.id,
(select listagg(relation_cpu_id, ', ') WITHIN GROUP (ORDER BY id) from v_cpu_relation where report.id = v_cpu_relation.relation_report_id) AS cpu_hash,
(select listagg(relation_monitor_id, ', ') WITHIN GROUP (ORDER BY id) from v_monitor_relation where report.id = v_monitor_relation.relation_report_id) AS monitor_hash
FROM report
GROUP BY report.id
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
idShura
@idShura
Так?
SELECT r.id,
       c.relation_cpu_id cpu_hash,
       LISTAGG(m.relation_monitor_id, ', ') WITHIN GROUP (ORDER BY m.id) AS monitor_hash
  FROM report r
       LEFT JOIN v_cpu_relation c ON r.id = c.relation_report_id
       LEFT JOIN v_monitor_relation m ON r.id = m.relation_report_id
 GROUP BY r.id, 
          c.relation_cpu_id


5e28452d98106444279407.png
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы