Sql 将列转换为表
这可能很容易,但我无法理解。SQL Server 2008。 我有以下资料: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
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进行测试,以查看是否需要它。