将一列分为每行SQL Server多行

时间:2019-02-20 07:57:35

标签: sql sql-server

我正在尝试将字符串字段拆分为多行,但保持表的结构相同,因此所有其他数据将在拆分行中重复。

拆分后的行数取决于字符串值。

我正在使用一个函数来拆分值,并且在对初始表中的单个记录执行查询时,它可以正常工作,因此,例如,如果我添加WHERE Id = 33,它将很好地工作。

问题是我希望对行上的字符串值执行拆分,这就是我陷入困境的地方。

Example Input:
ID | ActionRequired
1    "Rule ID: FU-1001, Rule ID: TM-201, Rule ID: WX-243"
2    "Rule ID: JK-2501, Rule ID: QD-201"

Required Output:
ID | ActinRequired
1    Rule ID: FU-1001
1    Rule ID: TM-201
1    Rule ID: WX-243
2    Rule ID: JK-2501
2    Rule ID: QD-201

到目前为止,我所拥有的是内联函数以返回拆分表:

CREATE FUNCTION SplitActionRequired(@AcReq varchar(max))
RETURNS @t TABLE(Error varchar(max)) 
AS
BEGIN
    DECLARE @xmlList XML = CAST('<i>' + REPLACE(@AcReq, '
        ', '</i><i>') + '</i>' AS XML);

    INSERT INTO @t(Error)
    SELECT x.i.value('.', 'VARCHAR(MAX)') AS [Error]
    FROM @xmlList.nodes('i') x(i);  

    RETURN
END
GO

然后在交叉联接查询中调用该函数:

DECLARE @columnValue VARCHAR(MAX) = (SELECT [ActionRequired] FROM DS_SFTR_SimulatorTrades WHERE Id = 33);

SELECT Id,Error
FROM DS_SFTR_SimulatorTrades
CROSS JOIN (SELECT * FROM SplitActionRequired(@columnValue))t2;

这显然只使用ID = 33的记录的分割值,但是努力添加一些东西将对每个记录分割ActionRequired值... 正在考虑以某种方式合并OVER子句。

感谢您的帮助, 扫罗

0 个答案:

没有答案