2012-02-28 2 views
0

한 행에 두 개의 행 값을 선택하고 연결하려고합니다. DB2에서 한 행에 두 개의 행 값을 선택하는 방법

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

내가 어떻게 할 수 있습니다

: 같은

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

결과 찾아야한다?

+1

이것은 경박 해 보일 수도 있지만 일반적으로 대답은 실제로 '하지 말아야합니다.'입니다. 표시 목적으로 처리하려면 응용 프로그램에서 해당 처리를 수행하십시오. 데이터의 이유로 데이터를 처리하려면 데이터를 정규화 된 1 : 많은 관계로 유지하고 해당 형식으로 처리하는 방법을 고려하십시오 (처리중인 유스 케이스를 게시하는 경우이를 지원할 수 있습니다). 그러나 여러 값을 단일 값으로 스쿼시하는 것은 일반적으로 가치가있는 것보다 더 많은 미래 통증을 유발하는 SQL 반 패턴입니다. – MatBailie

+0

@Dems 당신 말이 맞습니다. 이유는 요리사의 임시 요청입니다. – Kayser

+2

[DB2의 쿼리에서 구분 된 문자열 만들기] 가능한 중복 (http://stackoverflow.com/questions/3728010/create-a-delimitted-string-from-a-query-in-db2) – MatBailie

답변

0

게시 된 @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 버전입니다 원래 테이블에 대한 참조입니다.

관련 문제