投稿されたリンク@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を置き換えることができます元のテーブルへの参照。
これは見苦しいように見えるかもしれませんが、一般的に答えは実際には 'don't'です。表示上の理由からそれを行う場合は、アプリケーションでその処理を行います。データの理由からデータを作成したい場合は、データを正規化された1:多くの関係として保持し、その形式でデータを処理する方法を検討してください(扱っているユースケースを投稿すると役に立ちます)。しかし、複数の値を1つの値に縮退するのは、一般的にSQL Anti-Patternであり、将来の痛みは価値があるものよりも多くなります。 – MatBailie
@Demsあなたは正しいです。その理由は、シェフのアドホックなリクエストです。 – Kayser
[DB2のクエリから区切られた文字列を作成する]の複製が可能です(http://stackoverflow.com/questions/3728010/create-a-delimitted-string-from-a-query-in-db2) – MatBailie