【问题标题】:SQL Server comma-separated column to multiple columnsSQL Server 逗号分隔列到多列
【发布时间】: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] 

但是我无法继续前进,因为它没有按预期工作。

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

谢谢!

【问题讨论】:

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


    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-04-04
      • 2012-09-08
      • 1970-01-01
      • 1970-01-01
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多