Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL Server逗号分隔列到多列_Sql_Sql Server_Csv_User Defined Functions - Fatal编程技术网

SQL Server逗号分隔列到多列

SQL Server逗号分隔列到多列,sql,sql-server,csv,user-defined-functions,Sql,Sql Server,Csv,User Defined Functions,我目前有一个三列的表格组织,组ID和角色 可以忽略名为Org的列 我一直试图根据组ID对它们进行分组,并将属于同一组ID的角色拆分为一列 到目前为止,我可以对记录进行分组,并将同一组的角色放在同一列中 我使用了以下脚本: Select [Group ID], Substring((Select ',' + [Role] From [dbo].[ASA_test] B Where B.[Group ID]

我目前有一个三列的表格<代码>组织,
组ID
角色

可以忽略名为
Org
的列

我一直试图根据
组ID
对它们进行分组,并将属于同一
组ID
角色拆分为一列

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

我使用了以下脚本:

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] 
然而,我不能再往前走了,因为它没有像我预期的那样工作

有人能帮忙吗?请注意,记录的总数不受我在这里发布的内容限制


谢谢

我认为您必须在表名之后的insert查询中指定列名。见下文:

INSERT INTO @MyTempTableVariable(GroupID , Role)....

查询的其余部分应该可以正常工作。

我认为必须在表名之后的insert查询中指定列名。见下文:

INSERT INTO @MyTempTableVariable(GroupID , Role)....
查询的其余部分应该可以正常工作。

这样做

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
这样做

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

如果这对你有效,请标记为答案,这样其他人也可以从这个问题中受益。谢谢如果这对你有用,请标记为答案,这样其他人也可以从这个问题中受益。谢谢