Результаты стрэддл-запроса вместо суммирования повторяющихся значений

Для простоты мои поля запросов: ИДЕНТИФИКАТОР ЗАКАЗА, СУММА ЗАКАЗА и ТЕКСТ ЗАКАЗА.

Моя проблема заключается в том, что наша компания обычно имеет несколько полей «ТЕКСТ ЗАКАЗА», из-за чего мой запрос возвращает вторую запись (с накоплением) со всеми повторяющимися данными (ИДЕНТИФИКАТОР ЗАКАЗА, СУММА ЗАКАЗА), за исключением другого «ТЕКСТА ЗАКАЗА», который отличается текст.

Можно ли поместить второе поле «ТЕКСТ ЗАКАЗА» рядом с первым полем «ТЕКСТ ЗАКАЗА» (распределенное) ИЛИ даже объединить их в одну длинную строку «ТЕКСТ ЗАКАЗА» в DB2?

Пример того, что происходит сейчас и что я хочу сделать

Предположим, вы не можете создавать дополнительные таблицы или каким-либо образом манипулировать базой данных. Как всегда, любая помощь приветствуется!


person CRUTER    schedule 26.01.2015    source источник
comment
возможный дубликат Что такое SELF JOIN и когда вы будете использовать это?   -  person mustaccio    schedule 26.01.2015
comment
В отличие от Мустаччио, Телкарион сразу предложил использовать функцию LISTAGG().   -  person CRUTER    schedule 26.01.2015
comment
Не во всех версиях DB2 есть функция LISTAGG. Поскольку вы не разместили свой, я предложил самый безопасный вариант, который сработает где угодно.   -  person mustaccio    schedule 26.01.2015


Ответы (1)


Попробуйте использовать агрегатную функцию LISTAGG следующим образом:

SELECT ORDER_ID, ORDER_AMOUNT,
     LISTAGG(ORDER_TEXT, ', ') WITHIN GROUP(ORDER BY ORDER_TEXT)
     AS orders
  FROM PS_PO_HDR
  GROUP BY ORDER_ID, ORDER_AMOUNT

Просто замените имя таблицы на то, которое вы используете.

Подробности о функции доступны здесь (доступно с версии 9.7.4)

person Telkarion    schedule 26.01.2015