Sql 将列转换为表

Sql 将列转换为表,sql,sql-server,sql-server-2008,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

这可能很容易,但我无法理解。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

任何人有什么想法吗?

在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

这里有一篇关于这个话题的非常精彩的文章:它存在于我的书签中,我经常引用它。如果这不能完全回答您的问题,请告诉我使用递归CTE是一种聪明的方法。冗长,但在技术上符合ISO。@Thomas,对我来说,OP似乎不太关心ISO符合性,而是想找到一种方法来实现SQL server 2008的目标。我们知道这一点,因为标记已更新。最初,这个问题唯一的标签是
sql
。在我写我的答案时,你对我关于ISO的答案发表了评论,标签已经更新了=)我经常使用这个方法,效果很好。可能需要使用/不使用内部GROUP BY进行测试,以查看是否需要它。