我正在尝试将字符串字段拆分为多行,但保持表的结构相同,因此所有其他数据将在拆分行中重复。
拆分后的行数取决于字符串值。
我正在使用一个函数来拆分值,并且在对初始表中的单个记录执行查询时,它可以正常工作,因此,例如,如果我添加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子句。
感谢您的帮助, 扫罗