Как выбрать два значения строки подряд в DB2 - PullRequest
0 голосов
/ 28 февраля 2012

Я хочу выбрать два значения в строке и объединить их.

id     value
------------
1      abc
1      def
2      ghi
3      jkl
3      mno
3      prs

Результат должен выглядеть так:

id     value
------------
1      abc, def
2      ghi
3      jkl, mno, prs

Как я могу это сделать?

1 Ответ

0 голосов
/ 28 февраля 2012

Ссылка @Dems опубликована функционально идентична вашим требованиям.

Однако, если у вас нет доступа к функциям xml, вот рекурсивная версия CTE:

WITH Indexed(id, value, index) 
            as (SELECT id, value, ROW_NUMBER() OVER(PARTITION BY id ORDER BY value)
                FROM ValueTable),
     Concatenated(id, index, concatenated) 
                 as (SELECT id, index, value
                     FROM Indexed
                     WHERE index = 1
                     UNION ALL
                     SELECT a.id, a.index + 1, a.concatenated || ', ' || b.value
                     FROM Concatenated as a
                     JOIN Indexed as b
                     ON b.id = a.id
                     AND b.index = a.index + 1)
SELECT a.id, a.value
FROM Concatenated as a
EXCEPTION JOIN Indexed as b
ON b.id = a.id
AND b.index > a.index

Если у вас есть уникальный индекс в исходной таблице, Indexed CTE можно заменить ссылкой на исходную таблицу.

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