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)
任何帮助都会有很大的帮助,谢谢。
使用一些 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)