Переместить объект вверх и отделить на основе элемента - PullRequest
1 голос
/ 11 декабря 2019

У меня следующая проблема:

Apple  | Document 1 | 5
Orange | Document 2 | 4
Apple  | Document 3 | 7

Что бы я хотел сделать с запросом:

Apple  | Document 1 | Document 3 | 12
Orange | Document 2              | 7

Есть ли функция, которая делает это для вас?

Ответы [ 2 ]

2 голосов
/ 11 декабря 2019

В SQL Server 2017 вы можете использовать функцию STRING_AGG вместе с GROUP BY:

SELECT fruit, STRING_AGG(document, '|') AS documents, SUM(value) AS total
FROM t
GROUP BY fruit
1 голос
/ 11 декабря 2019

Вы можете попробовать использовать комбинацию Stuff and XML Path, если вы работаете в Pre SQL Server 2017

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

Как работают вещи и «Для пути XML» в Sql Server

...