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)
但是,当它运行时,它返回没有合并的原始数据集.我应该如何修改我的查询以返回所需的数据集?
你不需要游标使用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)