将列转置到表

时间:2011-04-14 21:44:33

标签: sql sql-server sql-server-2008

这可能很容易,但我无法理解它。 SQL Server 2008。 我有以下内容:

SELECT userId, accesslevel
FROM accesscontrol.dbo.BADGELINK

我得到的结果是

user id         accesslevel
72                 1
72                 5
72                 9
89                 1
89                 4
91                 9
91                 11

我想要的是

user id       acesslevels
72               1,5,9
89               1,4
91               9,11

任何想法?

2 个答案:

答案 0 :(得分:3)

在SQL Server中,您可以执行以下操作:

Select B.user_id
    , Stuff(
        (
        Select ',' + B1.AccessLevel
        From AccessControl.dbo.BadgeLink As B1
        Where B1.user_id = B.user_id
        Group By B1.AccessLevel
        For Xml Path('')
        ), 1, 2, '') As AccessLevels
From AccessControl.dbo.BadgeLink As B
Group By B.user_id

答案 1 :(得分:2)

这里有关于这个主题的绝对精彩的文章:http://www.simple-talk.com/sql/t-sql-programming/concatenating-row-values-in-transact-sql/它存在于我的书签中,我经常提到它。如果这不能完全回答您的问题,请告诉我