首页 > 解决方案 > 如何将表格 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

还是不好

知道怎么做吗?

标签: sqlsql-servertsql

解决方案


你可以使用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

推荐阅读