2009-11-20 4 views
4

이전에 몇 번 물어 봤지만 제 예제에 맞는 솔루션을 찾을 수 없습니다.SQL 행을 열로 변환

현재 특정 페이지를 사용할 수있는 사용자 권한 테이블이 있습니다. 표는 다음과 같이 보일 것이다 : 나는 모든 페이지 열로 표에 이름과 테이블의 각 행은 사용자 ID입니다이이 데이터에서 테이블을 생성 할 방법

UserID pagename   pageid 
----------------------------------- 
1   home    1 
1   contacts   3 
3   home    1 
2   links   2 

을 열 디스플레이 0 값

UserID  home  links contacts 
------------------------------------- 
1   1  0  1 
2   0  1  0 
3   1  0  0 

가 당신의 도움이 많이 감사합니다 : 또는 1 원래의 테이블은 예를 들어 특정 페이지에 대한 항목을 가지고 있는지 여부에 따라!

+0

도끼를 사용하여 주셔서 감사합니다. – yogibear

+0

집계가없는 축 : http://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function –

+0

사례를 제공해 주시겠습니까? 이 페이지는 Pivot – yogibear

답변

7

빌드 @t에서 테이블 :

declare @t as table (UserID int, pagename nvarchar(20), pageid int); 
insert into @t values (1,'home',1),(1,'contacts',3),(3,'home',1),(2,'links',2); 

피벗을 :

select UserID, 
    case when home is null then 0 else 1 end as home, 
    case when links is null then 0 else 1 end as links, 
    case when contacts is null then 0 else 1 end as contacts 
from @t 
pivot (
    max(pageid) for pagename in ([home],[links],[contacts]) 
) pivotT 

UserID  home  links  contacts 
----------- ----------- ----------- ----------- 
1   1   0   1 
2   0   1   0 
3   1   0   0 
0

이 쉽게 XML을 사용해야 그 이름을 가진 열을 행으로 바꾸어합니다. 내 블로그에서 나는 이것을 예제로 설명했다 : Link

+3

을 사용하여 쉽게 완료 한 방법을 보여주지 못합니까? 클릭하지 마세요, 당신을 해칠 수도 있습니다! –

관련 문제