使用 SQL Server 将一列中的字符串中的多个值拆分为多个列

Stu*_*art 2 sql sql-server delimiter multiple-columns

我在 SQL Server 中有一个表,它输出以下内容:

公司名称 公司编号 标签
第一比较有限公司 1 信贷经纪人;有限许可贷款人;保险中介
商业网 第456章 投资顾问;仅限信用经纪
慈善网 156789 不以营利为目的

我想拆分标签列中的值,以便每列只有一个标签,因此:

公司名称 公司编号 标签1 标签2 标签3
第一比较有限公司 1 信用经纪人 有限许可贷款人 保险中介
商业网 第456章 投资顾问 仅限信用经纪
慈善网 156789 不以营利为目的

我可以在 Excel 中使用分号作为分隔符手动执行此操作,然后调整标题,但这可以在 SQL Server 中完成吗?最终,我想要 SQL Server 中的视图来格式化数据,以便我可以使用 powershell 脚本生成 csv 并在电子邮件中发送。

我已经尝试了以下方法,我想我可能已经接近了,它只是在视图中不起作用:

with TagsDelimited_CTE AS
(select CompanyName, CompanyNumber, Value,
ROW_NUMBER() over(partition by CompanyName, CompanyNumber order by CompanyName, CompanyNumber) as RowNum
from  Source
CROSS APPLY
string_split(Tags,';') 
)
select CompanyName, CompanyNumber,
[1] as Tag1,
[2] as Tag2,
[3] as Tag3
From TagsDelimited_CTE
PIVOT
(MAX(value)
For RowNum in ([1],[2],[3])) as PVT
Run Code Online (Sandbox Code Playgroud)

任何帮助都会有很大的帮助,谢谢。

Joh*_*tti 8

使用一些 JSON 并假设您有已知或最大数量的标签

Select A.CompanyName
      ,A.CompanyNumber
      ,Tag1  = JSON_VALUE(S,'$[0]')
      ,Tag2  = JSON_VALUE(S,'$[1]')
      ,Tag3  = JSON_VALUE(S,'$[2]')
From  YourTable A
Cross Apply ( values ( '["'+replace(STRING_ESCAPE(Tags,'json'),';','","')+'"]' ) ) B(S)
Run Code Online (Sandbox Code Playgroud)

  • @约翰卡佩莱蒂。。。你和 JSON。这就像黑魔法。 (2认同)