SQL Server Coalesce数据集

Kid*_*man 1 sql sql-server coalesce

我有一个返回数据集的查询,如下所示:

Region                           Name
-------------------------------------------------------------
Canada                           Jim 
Canada                           Michael
Canada                           Andy
Mexico                           Jim
Mexico                           Michael
Mexico                           Kevin
Run Code Online (Sandbox Code Playgroud)

但是我希望像这样返回它:

Region                           Name
-------------------------------------------------------------
Canada, Mexico                   Jim
Canada, Mexico                   Michael
Canada                           Andy
Mexico                           Kevin
Run Code Online (Sandbox Code Playgroud)

当Names相等时,我的游标查询尝试合并Region名称

OPEN RegionCursor

FETCH NEXT
FROM RegionCursor
INTO @regionNext
    ,@NameNext

SET @name = @NameNext;

WHILE @@FETCH_STATUS = 0
BEGIN
    IF @NameNext != @name
    BEGIN
        INSERT @RegionTable
        SELECT @region
            ,@name

        SELECT @region = @regionNext
            ,@name = @NameNext
    END
    ELSE
        SET @region = COALESCE(@region + ', ', SPACE(0)) + @regionNext;

    FETCH NEXT
    FROM RegionCursor
    INTO @regionNext
        ,@NameNext
END

INSERT @RegionTable
SELECT @region
    ,@name

CLOSE RegionCursor;

DEALLOCATE RegionCursor;
Run Code Online (Sandbox Code Playgroud)

但是,当它运行时,它返回没有合并的原始数据集.我应该如何修改我的查询以返回所需的数据集?

Pரத*_*ீப் 9

你不需要游标使用XML PATH技巧来做到这一点.

SELECT Name,
       LEFT(cs.Region, Len(cs.Region) - 1) AS Region                           
FROM   Yourtable a
       CROSS APPLY (SELECT Region + ','
                    FROM   Yourtable B
                    WHERE  a.name = b.name
                    FOR XML PATH('')) cs (Region)
GROUP  BY Name,
          LEFT(cs.Region, Len(cs.Region) - 1) 
Run Code Online (Sandbox Code Playgroud)