У меня есть запрос, который возвращает набор данных, который выглядит следующим образом:данных SQL Server Coalesce набор
Region Name
-------------------------------------------------------------
Canada Jim
Canada Michael
Canada Andy
Mexico Jim
Mexico Michael
Mexico Kevin
, но я хочу, чтобы вернуть его, как это вместо:
Region Name
-------------------------------------------------------------
Canada, Mexico Jim
Canada, Mexico Michael
Canada Andy
Mexico Kevin
Мой курсор запроса пытается сливаться названия региона, когда имена равны
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;
когда запускается, однако, она возвращает исходный набор данных не с hing объединился. Как мне изменить свой запрос, чтобы вернуть нужный набор данных?
Да я не думаю, что COALESCE делает то, что вы думаете, что он делает. –
'COALESCE' является' ISNULL' для множественных провалов. Вы ищете 'CONCAT' – Siyual
' COALESCE (@region + ',', SPACE (0)) 'будет возвращать либо @region, объединенное запятой, либо просто запятую. Он никогда не вернет 'SPACE (0)', поскольку в первом параметре всегда есть что-то ненулевое. Возможно, вы имели в виду 'CASE WHEN @region IS NOT NULL THEN @region + ',' END + @ regionNext' – JNevill