t1.BusinessId
另外是一个相反的操作,借助上面合并之后的结果,将一个多个值的字符串列拆分开来,转换为多行,
用到的字符串拆分函数,比较常见
CREATE FUNCTION [dbo].[fn_SplitStringToTable]
@s VARCHAR(max),
@split VARCHAR(10)
RETURNS @re TABLE
Id INT IDENTITY(1,1),
Value VARCHAR(100)
BEGIN
IF @s IS NULL
RETURN
IF @split IS NULL
RETURN
IF(LEN(@split)<=0)
BEGIN
INSERT INTO @re VALUES (@s)
RETURN
DECLARE @splitlen INT
SET @splitlen=LEN(@split ) - 1
WHILE CHARINDEX(@split, @s) > 0
BEGIN
INSERT @re VALUES(LEFT(@s, CHARINDEX(@split, @s) - 1))
SET @s=STUFF(@s, 1, CHARINDEX(@split, @s) + @splitlen, '')
INSERT @re VALUES(@s)
RETURN
( SELECT ','+t2.BusinessValue
FROM TestColumnMergeAndSplit t2
WHERE t2.BusinessId = t1.BusinessId
FOR XML PATH('')
1,1,''
AS ColString
FROM TestColumnMergeAndSplit t1
GROUP BY t1.BusinessId
SELECT * FROM TestColumnMergeAndSplit_BAK
SELECT t1.BusinessId,t1.ColString,t2.Id,t2.Value
FROM TestColumnMergeAndSplit_BAK t1
CROSS APPLY dbo.fn_SplitStringToTable(ColString,',')t2