У меня следующая проблема:
Apple | Document 1 | 5 Orange | Document 2 | 4 Apple | Document 3 | 7
Что бы я хотел сделать с запросом:
Apple | Document 1 | Document 3 | 12 Orange | Document 2 | 7
Есть ли функция, которая делает это для вас?
В SQL Server 2017 вы можете использовать функцию STRING_AGG вместе с GROUP BY:
STRING_AGG
GROUP BY
SELECT fruit, STRING_AGG(document, '|') AS documents, SUM(value) AS total FROM t GROUP BY fruit
Вы можете попробовать использовать комбинацию Stuff and XML Path, если вы работаете в Pre SQL Server 2017
Stuff and XML Path
SELECT fruit, abc = STUFF( (SELECT '|' + doc FROM test t1 WHERE t1.fruit = t2.fruit FOR XML PATH ('')), 1, 1, '' ), SUM(value) FROM test t2 GROUP BY fruit
http://sqlfiddle.com/#!18/ce52e/2
Здесь очень хорошо объясняется STUFF and XML PATH
STUFF and XML PATH
Как работают вещи и «Для пути XML» в Sql Server