Разпределяне на резултатите от заявката вместо натрупване на дублиращи се стойности

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

Проблемът ми е, че нашата компания обикновено има множество полета „ТЕКСТ НА ПОРЪЧКАТА“, което кара моята заявка да връща втори запис (подреден) с всички дублиращи се данни (ID на ПОРЪЧКАТА, СУМА НА ПОРЪЧКАТА), с изключение на другия „ТЕКСТ НА ПОРЪЧКАТА“, който е различен текст.

Възможно ли е да поставите второто поле „ORDER TEXT“ до първото поле „ORDER TEXT“ (разпръснато) ИЛИ дори да свържете двете в един дълъг низ „ORDER TEXT“ в DB2?

Пример за това, което се случва в момента и това, което искам да се случи

Да предположим, че не можете да създавате допълнителни таблици или да манипулирате базата данни по някакъв начин. Както винаги, всяка помощ се оценява високо!


person CRUTER    schedule 26.01.2015    source източник
comment
възможен дубликат на Какво е SELF JOIN и кога бихте използвали това?   -  person mustaccio    schedule 26.01.2015
comment
За разлика от mustaccio, Telkarion беше наясно с предложението си за използване на функцията 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