我想将具有可变数量值的字符串分成不同的列。
我知道它存在一个解决方案“ PIVOT”,但是我不确定当值的数量不同时,这种方法是否可行。
这里是一个例子:
+-----+-----------+
| Key | Value |
+-----+-----------+
| 1 | A,B,C |
| 2 | A,B,C,D |
| 3 | A,B,C,D,E |
+-----+-----------+
结果:
+-----+------+------+------+------+------+
| Key | Col1 | Col2 | Col3 | Col4 | Col5 |
+-----+------+------+------+------+------+
| 1 | A | B | C | | |
| 2 | A | B | C | D | |
| 3 | A | B | C | D | E |
+-----+------+------+------+------+------+
我知道字符串中至少有1个值,最大5个值,因此我必须生成5列并相应地进行归档。
答案 0 :(得分:2)
使用一些XML查询:
DECLARE @mockup TABLE (
[key] INT
,[value] VARCHAR(max)
);
INSERT INTO @mockup
VALUES
(1,'A,B,C')
,(2,'A,B,C,D')
,(3,'A,B,C,D,E')
;WITH Splitted
AS (
SELECT [key]
,[value]
,CAST('<x>' + REPLACE([value], ',', '</x><x>') + '</x>' AS XML) AS Parts
FROM @mockup
)
SELECT [key]
,Parts.value(N'/x[1]', 'varchar(max)') AS Col_1
,Parts.value(N'/x[2]', 'varchar(max)') AS Col_2
,Parts.value(N'/x[3]', 'varchar(max)') AS Col_3
,Parts.value(N'/x[4]', 'varchar(max)') AS Col_4
,Parts.value(N'/x[5]', 'varchar(max)') AS Col_5
FROM Splitted;
结果: