【发布时间】:2021-11-07 00:16:42
【问题描述】:
我在 SQL Server 中有一个表,它输出以下内容:
| CompanyName | CompanyNumber | Tags |
|---|---|---|
| 1st Comp Ltd | 1 | Credit broker;Limited Permission Lender;Insurance Intermediary |
| business.com | 456 | Investment Advisor;Credit Broking Only |
| Charity.org | 156789 | Not for profit |
我想拆分标签列中的值,使每列只有一个标签,所以:
| CompanyName | CompanyNumber | Tag1 | Tag2 | Tag3 |
|---|---|---|---|---|
| 1st Comp Ltd | 1 | Credit broker | Limited Permission Lender | Insurance Intermediary |
| business.com | 456 | Investment Advisor | Credit Broking Only | |
| Charity.org | 156789 | Not for profit |
我可以在 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
任何帮助都会有很大帮助,谢谢。
【问题讨论】:
-
似乎工作正常,也在视图中
-
它现在也适用于我,我一定是在某个地方犯了错误,抱歉。
-
表格未规范化。这就是使它工作如此困难的原因。我建议您更改数据库设计(或更改),使其成为应有的关系数据库,并带有单独的 company_tag 表。
标签: sql sql-server multiple-columns delimiter