SQL Server 逗号分隔列到多列

Posted

技术标签:

【中文标题】SQL Server 逗号分隔列到多列【英文标题】:SQL Server comma-separated column to multiple columns 【发布时间】:2015-03-19 14:18:26 【问题描述】:

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

可以忽略名为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 逗号分隔列到多列的主要内容,如果未能解决你的问题,请参考以下文章

使用 SQL Server 将逗号分隔的文本转换为多列结果

T-SQL -- 将逗号分隔的列转换为多列

在SQL过程中将一列中的逗号分隔值拆分为多列

使用 SSIS OR T-SQL 将一列带引号和不带引号的逗号分隔值拆分为多列

mysql中将一列以逗号分隔的值分割成多列显示?

sql 分隔符