게시 된 @Dems 링크는 귀하의 요구 사항과 기능적으로 동일합니다. 초기 테이블에 고유 인덱스가있는 경우
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를 교체 할 수 있습니다 :
그러나, 당신은 XML 기능에 액세스 할 수없는 경우에, 여기에 재귀 CTE 버전입니다 원래 테이블에 대한 참조입니다.
이것은 경박 해 보일 수도 있지만 일반적으로 대답은 실제로 '하지 말아야합니다.'입니다. 표시 목적으로 처리하려면 응용 프로그램에서 해당 처리를 수행하십시오. 데이터의 이유로 데이터를 처리하려면 데이터를 정규화 된 1 : 많은 관계로 유지하고 해당 형식으로 처리하는 방법을 고려하십시오 (처리중인 유스 케이스를 게시하는 경우이를 지원할 수 있습니다). 그러나 여러 값을 단일 값으로 스쿼시하는 것은 일반적으로 가치가있는 것보다 더 많은 미래 통증을 유발하는 SQL 반 패턴입니다. – MatBailie
@Dems 당신 말이 맞습니다. 이유는 요리사의 임시 요청입니다. – Kayser
[DB2의 쿼리에서 구분 된 문자열 만들기] 가능한 중복 (http://stackoverflow.com/questions/3728010/create-a-delimitted-string-from-a-query-in-db2) – MatBailie