SQL Server以逗号分隔列到多列

时间:2015-03-19 14:18:27

标签: sql sql-server csv user-defined-functions

我目前有一个包含三列的表格; OrgGroup IDRole

enter image description here

可以忽略名为Org的列。

我一直试图根据Group ID对它们进行分组,并将属于同一Roles的每个Group ID拆分为一列。

到目前为止,我可以设法对记录进行分组,并将同一组的Roles放在同一列中。

enter image description here

我使用了以下脚本:

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] 

然而,我无法继续前进,因为它没有像我预期的那样工作。

有人可以帮忙吗?请注意,记录总数不限于我在此处发布的内容。

谢谢!

2 个答案:

答案 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