2014-04-11 5 views
1

나는이SQL - 피벗 2 열

EHC DEN 
B D 

하지만이 아웃이 가능

EHC DEN EHC2 DEN2 
B D A C 

로두고 필요에 따라 다음 SQL

CREATE TABLE #t (id varchar(10) 
       ,Rscd varchar(10) 
       ,Accd varchar(10)) 

INSERT INTO #t Values ('EHC','A','B') 
INSERT INTO #t Values ('DEN','C','D') 

select EHC,DEN 
from 
(
    select id as id2, value 
    from #t 
cross apply 
    (
    select id,Rscd union select id,Accd 
    ) c (id2,value) 
) d 
pivot 
(
    max(value) 
    for id2 in ([EHC],[DEN]) 
) piv; 

이 생산 출력? 도움을 주셔서 감사합니다.

답변

1

결과를 얻으려면 row_number()과 같은 창 함수를 구현해야합니다. 그러면 id을 기반으로 일련 번호가 생성됩니다.

select EHC1,DEN1, EHC2, DEN2 
from 
(
    select value, 
    id2 = id 
      + cast(row_number() over(partition by id 
            order by so desc) as varchar(10)) 
    from #t 
    cross apply 
    (
    select id, Rscd, 1 union 
    select id, Accd, 2 
) c (id2,value, so) 
) d 
pivot 
(
    max(value) 
    for id2 in ([EHC1],[DEN1], [EHC2],[DEN2]) 
) piv; 

SQL Fiddle with Demo

참조 : 당신이 그럼 난 당신이 데이터를 주문하는 데 사용됩니다 그 적용 CROSS 통해 unpivoting되는 열을 생성 할 경우에, 데이터를 원하는 특정 순서가 나타납니다