2012-09-22 4 views
2

피벗 연산자 (이전 ms-sql 서버)를 사용하지 않고 테이블을 부분적으로 피벗 쿼리하는 중입니다. 테이블 :
피벗 연산자가없는 부분 피벗

id-------item---------rank1---------rank2 
231------it1--------- 1 ----------- 1 
231------it2-------- 1 ----------- 2 
231------it3--------- 1 ----------- 3 
154------it4--------- 3 ----------- 4 
154------it2--------- 1 ----------- 2 
155------it2--------- 1 ----------- 2 
156------it3 -------- 2 ----------- 2 
156------it1 -------- 1 ----------- 1 

예상 된 결과 :

id---------item1----item2----item3---item*... 
231 -------it1------it2---------it3 
154--------it2------it4 
155--------it2 
156--------it1------it3 

rank1에 의한 순서와

rank2 나는 구글에 검색하지만, 내가 찾은 솔루션을 적용하기에 너무 복잡했다.

+0

어떤 버전의 SQL Server입니까? – Taryn

답변

1

SQL 서버에서 을 사용하여 각 id 그룹에 대한 행 번호를 할당 할 수 있습니다. 그런 다음 피벗에 max(case(... 트릭을 사용할 수 있습니다 : 동적 SQL을 사용하지 않고 N 항목에 대한 일반적인 솔루션은 없습니다

select id 
,  max(case when rn = 1 then item end) as item1 
,  max(case when rn = 2 then item end) as item2 
,  max(case when rn = 3 then item end) as item3 
from (
     select row_number() over (partition by id 
        order by rank1, rank2) as rn 
     ,  * 
     from YourTable 
     ) as SubQueryAlias 
group by 
     id 

.

+0

빠른 답변을 주셔서 감사 드리겠습니다. 우리는 최대 및 케이스를 결합 할 수 있습니다.
이 특별한 경우에 (나는 확실히 이해할 수 있습니다.) 나는 회선을 추가해야합니다.
max = 4 다음 항목 끝) item4로 – user1690564