( SELECT ' , ' + t2.BusinessValue FROM TestColumnMergeAndSplit t2 WHERE t2.BusinessId = t1.BusinessId XML PATH( '' ) 1 , 1 , '' AS ColNames FROM TestColumnMergeAndSplit t1 GROUP BY 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