sql - 如何将表格 CSV 拆分为行
问题描述
我有一张看起来像这样的桌子
ID CustName CustAge Attrib1 Attrib2
===========================================
1 Tom 23 A1,A3,H7,F4 H2,K9,L2
2 Mike 34 Y2,K1,P7 A4,S9
3 Mary 62 R6,W3 K6,S6,L8
4 John 49 W4,K4,W2,G2 E2,N5
5 Ali 36 W3,R5,H2 E3
6 Mark 22 A2 H9,Q7,T6
我想把它分成几行
所以看起来像这样
ID CustName CustAge Attrib1 AttribNo
===========================================
1 Tom 23 A1 1
1 Tom 23 A3 1
1 Tom 23 H7 1
1 Tom 23 F4 1
1 Tom 23 H2 2
1 Tom 23 K9 2
1 Tom 23 L2 2
2 Mike 34 Y2 1
2 Mike 34 K1 1
2 Mike 34 P7 1
2 Mike 34 A4 2
2 Mike 34 S9 2
我试过这个但没有用
SELECT *, (SELECT Value FROM STRING_SPLIT(Attrib1, ',')) FROM Customers
我也试过
SELECT *
FROM Customers C
INNER JOIN (SELECT Value FROM STRING_SPLIT(C.Attrib1, ',')) A1
还是不好
知道怎么做吗?
解决方案
你可以使用cross apply
:
select * from tablename t
cross apply STRING_SPLIT(t.Attrib1,',') ss
和 union 将是获得最终结果的最简单方法:
select *,1 AttribNo from tablename t
cross apply STRING_SPLIT(t.Attrib1,',') s1
union all
select *,2 AttribNo from tablename t
cross apply STRING_SPLIT(t.Attrib2,',') s2
推荐阅读
- slurm - 链接多个具有依赖关系的 SLURM 作业
- sql - Postgres 执行由 string_agg 创建的选择查询
- c# - 如何使用 exchange.redis 将新项目附加到现有的 redis 键
- azure-sql-database - Sql数据库弹性池和sku组合无效
- python - Python嵌套列表的最高级别?
- java - 如何使用 javax.ws.rs.client.Invocation.Builder 忽略无法识别的属性?
- java - JDialog 仅在程序结束时加载
- python-3.x - 在 Python 中读取文本文件时如何评估转义字符
- javascript - 当不存在的键存在时 Mongoose 抛出错误
- spring-boot - 将 Spring Boot Actuator 与 New Relic 集成