一尘不染

使用TSQL将逗号分隔的字符串表行拆分为单独的行

sql

说我有一个查询,返回以下内容

ID       SomeValue
1        a,b,c,d
2        e,f,g

我想返回以下内容:

ID       SomeValue
1        a
1        b
1        c
1        d
2        e
2        f
2        g

我已经有一个UDF调用Split,它将接受一个字符串和一个delimter并将其作为带有称为[Value]的单个列的表返回。鉴于此,SQL如何实现这一目标?


阅读 228

收藏
2021-03-10

共1个答案

一尘不染

另外,您可以像这样使用XML:

DECLARE @yourTable TABLE(ID INT,SomeValue VARCHAR(25));

INSERT INTO @yourTable
VALUES  (1,'a,b,c,d'),
        (2,'e,f,g');

WITH CTE
AS
(
    SELECT  ID,
            [xml_val] = CAST('<t>' + REPLACE(SomeValue,',','</t><t>') + '</t>' AS XML)
    FROM @yourTable
)

SELECT  ID,
        [SomeValue] = col.value('.','VARCHAR(100)')
FROM CTE
CROSS APPLY [xml_val].nodes('/t') CA(col)
2021-03-10