我的数据集如下所示(输入)。
IR# CR#
1 1,2
2 3
3 4,5,6
我想要以下输出。您可以在此示例中考虑所有字段varchar。
IR# CR#
1 1
1 2
2 3
3 4
3 5
3 6
我有UDF将CSV字符串拆分成行......但是不能将表中的1行拆分成多行,然后联合将下一行等等。
谢谢!
答案 0 :(得分:1)
将CROSS APPLY与拆分UDF结合使用。我用于示例的字符串拆分器来自here。
/* Create function for purposes of demo */
CREATE FUNCTION [dbo].[fnParseStringTSQL] (@string NVARCHAR(MAX),@separator NCHAR(1))
RETURNS @parsedString TABLE (string NVARCHAR(MAX))
AS
BEGIN
DECLARE @position int
SET @position = 1
SET @string = @string + @separator
WHILE charindex(@separator,@string,@position) <> 0
BEGIN
INSERT into @parsedString
SELECT substring(@string, @position, charindex(@separator,@string,@position) - @position)
SET @position = charindex(@separator,@string,@position) + 1
END
RETURN
END
go
/* Set up sample data */
declare @t table (
IR int,
CR varchar(100)
)
insert into @t
(IR, CR)
select 1, '1,2' union all
select 2, '3' union all
select 3, '4,5,6'
/* Here's the query that solves the problem */
select t.IR, p.string
from @t t
cross apply [dbo].[fnParseStringTSQL](t.CR,',') p
/* clean up after demo */
drop function [dbo].[fnParseStringTSQL]