如何将逗号分隔的值拆分为未知的列数

时间:2019-05-23 18:56:59

标签: sql-server-2012 mailmerge word-2010

不是执行25个以上的内部联接和单个select语句,而是有一种更动态的方式来处理与1条记录关联的“ ACTION_NAME”列中的所有项目,并将它们显示为多行?每个都有自己的列名称(但可以是随机名称)。

我实际上必须使用一个表列,该表列可以包含25个甚至更多的项目。我永远无法真正知道到底有多少。我想使代码能够自我维持,以便将来进行更改。最终,我需要在它们自己的列中使用它们,以便可以将它们以所需格式显示在“邮件合并信”中。谢谢!

我正在使用CROSS APPLY,并且当我尝试在SELECT语句中创建所需的内容时,我只能看到与与一个记录一起列出的一个记录相关联的所有“ ACTION_NAME”项目,这些记录在由'分隔的一列中;'。从那开始,我需要将分号中的每个项目都分离到自己的列中。

SELECT DISTINCT 
a.[PersonID],
a.[ACTION_ID],
a.[ACTION_NAME],
d.name
FROM dbo.[ACTIONSCHEDULE] a
CROSS APPLY  (SELECT substring(a2.[ACTION_NAME],1,100) +';'
         FROM [ACTIONSCHEDULE] a2
         WHERE a2.PEOPLE_ORG_CODE_ID=a.PEOPLE_ORG_CODE_ID
         FOR XML PATH('')) D (name)
WHERE ( a.[ACADEMIC_YEAR] > '2018'   )

例如,ID#1在a。[ACTION_NAME]中包含2个项目。这以传统方式显示,在一列中有两行。我试过的是使d.name工作,以使记录ID为#1的行为多列。

ID      ACTION_NAME       name
--------------------------------------------
1       ADM Folder        PARTNE20;ADM Folder;
1       PARTNE20          PARTNE20;ADM Folder;

我希望它看起来像什么

ID      name1             name2
--------------------------------------------
1       ADM Folder        PARTNE20

但是,它又不是2列或4列,有些记录有超过25个与之相关的项目。好的,谢谢!

0 个答案:

没有答案