2013-06-14 2 views
0

아래의 형식에 따라 30,000 개 이상의 레코드가있는 테이블이 있습니다.고유 계좌 번호를 기반으로 레코드 결합

PK, AccountNo, OwnerFname, OwnerLname 
1 1   John  Smith 
2 1   Julie  Smith 
3 2   Eric  Doe 
4 2   Sara  Doe 
5 3   Bill  Johnson 
6 4   Don   Carlson 
7 4   Donna  Carlson 

다음 결과를 생성하는 쿼리를 만들어야합니다.

AccountNo, OwnerFname, OwnerLname, Owner2Fname, Owner2Lname 
1   John  Smith  Julie  Smith 
2   Eric  Doe   Sara   Doe 
3   Bill  Johnson 
4   Don   Carlson  Donna  Carlson 

이 경우에도 가능합니까? 재귀 쿼리를 사용해야하지만 조합이 올바르지 않은 것 같습니다.

+0

가 왜 이런 식으로 그들을 결합하고 싶어 : - 최대/케이스 접근 방식을 사용

이 당신의 결과를 피벗 공통 테이블 식 및 ROW_NUMBER를 사용 ? 결과가 더 힘들어 지거나 더 쉽지는 않을 것입니다 (데이터의 너비가 어느 정도인지는 알지도 못합니다) –

+0

잠재적 인 소유자의 최대 수가 있습니까? 2 명 이상? 아니면 무제한입니까 (동적 쿼리가 필요할 것입니까?)? – sgeddes

+0

메일 링 레이블을 중복없이 인쇄 할 수 있도록 쿼리가 행을 병합합니다 (단위당 1 개). 이 소프트웨어에는 2 명의 공식 소유자 만 유닛에 할당 할 수 있으므로 동적 일 필요는 없습니다. – BilliD

답변

2

당신이하려는 것은 PIVOT 결과입니다. SQL Server는 PIVOT 명령을 지원하지만 MAXCASE과 함께 사용하는 것이 좋습니다. 두 옵션 모두 잠재적 인 열의 수를 알고 있다고 가정합니다. 그렇지 않다면 동적 SQL을 사용해야합니다.

with cte as (
    select row_number() over (partition by accountno order by pk) rn, 
    accountno, ownerfname, ownerlname 
    from yourtable 
) 
select 
    accountno, 
    max(case when rn = 1 then ownerfname end) OwnerFname, 
    max(case when rn = 1 then ownerlname end) OwnerLname, 
    max(case when rn = 2 then ownerfname end) OwnerFname2, 
    max(case when rn = 2 then ownerlname end) OwnerLname2 
from cte 
group by accountno 
관련 문제