我知道有很多关于如何在 SQL Server 中拆分字符串的示例。但是,它们通常用于单个分隔字符串。在不使用函数(SQL Server 2016)的情况下拆分多个分隔字符串的最佳方法是什么?
这是我开始的内容:
GroupId Val1 Val2
----------- --------- ------
G1 1,2,3 a,b,c
G2 4,5,6 d,e,f
G3 1,2,3,4 w,x,y,z
这就是我想要的结果:
GroupId Val1 Val2
------- ------- -------
G1 1 a
G1 2 b
G1 3 c
G2 4 d
G2 5 e
G2 6 f
G3 1 w
G3 2 x
G3 3 y
G3 4 z
根据我读过的所有内容,我认为我可能需要使用 XML 方法,因为它允许我指定顺序,但我无法找到拆分多个列的这种方法的示例。
下面是创建源表的 T-SQL:
DROP TABLE IF EXISTS #TestData;
CREATE TABLE #TestData(GroupId VARCHAR(10),
Val1 VARCHAR(100),
Val2 VARCHAR(100)
);
INSERT INTO #TestData
VALUES ('G1', '1,2,3', 'a,b,c'),
('G2', '4,5,6', 'd,e,f'),
('G3', '1,2,3,4', 'w,x,y,z');
SELECT *
FROM #TestData;
先感谢您!
将分隔字符串转换为 JSON 数组,并使用 OPENJSON,它公开了数组的词法顺序。例如
这个
输出
所以
输出