SQL Server 逗号分隔列到多列
Posted
技术标签:
【中文标题】SQL Server 逗号分隔列到多列【英文标题】:SQL Server comma-separated column to multiple columns 【发布时间】:2015-03-19 14:18:26 【问题描述】:我目前有一个三列的表格; Org
、Group ID
和 Role
。
可以忽略名为Org
的列。
我一直在尝试做的是根据Group ID
对它们进行分组,并将属于同一Group ID
的每个Roles
拆分为单个列。
到目前为止,我可以将记录分组并将同一组的Roles
放在同一列中。
我使用了以下脚本:
Select
[Group ID],
Substring((Select ',' + [Role]
From [dbo].[ASA_test] B
Where B.[Group ID] = A.[Group ID]]
For XML Path('')), 2, 8000) As List
From
[dbo].[ASA_test] A
Group By
[Group ID]
后来我创建了一个临时表变量,并在其中插入了上面的 SQL,以便之后在用户定义的函数中使用这个变量来获得结果。
请看下面:
DECLARE @MyTempTableVariable TABLE
(
GroupID int,
Role nvarchar(255)
)
INSERT INTO @MyTempTableVariable
Select
[Group ID],
Substring((Select ',' + [Role]
From [dbo].[ASA_test] B
Where B.[Group ID] = A.[Group ID]]
For XML Path('')), 2, 8000) As List
From
[dbo].[ASA_test] A
Group By
[Group ID]
但是我无法继续前进,因为它没有按预期工作。
有人可以帮忙吗?请注意,记录的总数不受我在此处发布的内容的限制。
谢谢!
【问题讨论】:
【参考方案1】:我认为您必须在插入查询中在表名之后指定列名。见下文:
INSERT INTO @MyTempTableVariable(GroupID , Role)....
查询的其余部分应该可以正常工作。
【讨论】:
如果这对你有用,请标记为答案,以便其他人也可以从这个问题中受益。谢谢【参考方案2】:这样做。
SELECT GroupID
,STUFF((SELECT ', ' + CAST([Role] AS VARCHAR(10)) [text()]
FROM [dbo].[ASA_test]
WHERE GroupID = t.GroupID
FOR XML PATH(''), TYPE)
.value('.','NVARCHAR(MAX)'),1,2,' ') List_Output
FROM [dbo].[ASA_test] t
GROUP BY GroupID
【讨论】:
以上是关于SQL Server 逗号分隔列到多列的主要内容,如果未能解决你的问题,请参考以下文章