我目前有一个包含三列的表格; Org
,Group ID
和Role
。
可以忽略名为Org
的列。
我一直试图根据Group ID
对它们进行分组,并将属于同一Roles
的每个Group ID
拆分为一列。
到目前为止,我可以设法对记录进行分组,并将同一组的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]
然而,我无法继续前进,因为它没有像我预期的那样工作。
有人可以帮忙吗?请注意,记录总数不限于我在此处发布的内容。
谢谢!
答案 0 :(得分:2)
我认为您必须在表名后的insert查询中指定列名。见下文:
INSERT INTO @MyTempTableVariable(GroupID , Role)....
其余查询应该可以正常工作。
答案 1 :(得分:1)
这样做。
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