2009-11-20 199 views
4

我知道这已被问过几次,但我找不到适合我的示例的任何解决方案。SQL将行转换为列

我目前有一个用户权限表来使用某些页面。该表是这样的:

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

我怎么会产生从这个数据,我都表列列的页面名称和表的每一行是一个用户ID表,列值显示0或1在原有基础上表是否有对特定页面的条目,例如:

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

你的帮助深表感谢!

+0

感谢格式化斧,我试图找出如何做到这一点。 – yogibear 2009-11-20 06:02:14

+0

没有聚合的枢轴:http://stackoverflow.com/questions/1343145/tsql-pivot-without-aggregate-function – 2009-11-20 06:02:35

+0

你能举个例子吗?该页面不显示如何使用Pivot – yogibear 2009-11-20 06:11:51

回答

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

完成这很容易?不要点击,可能会伤害你! – 2011-11-08 23:05:09