Объединить несколько строк с одинаковым идентификатором в один столбец - PullRequest
0 голосов
/ 28 июня 2019

В SQL Server у меня есть запрос, извлекающий значения, такие как:

SELECT ID, NAME, TITLE
FROM TABLE_X

Чтобы получить результаты как:

ID  NAME  TITLE
----------------
01  Bob   Cat
02  Bob   Bat
03  Tom   Mat

Я хочу выполнить запрос, чтобы получить следующие результаты:

NAME  COUNT  TITLE
-----------------------
Bob   2      Cat, Bat
Tom   1      Mat

Все, что у меня есть, примерно так:

SELECT NAME, COUNT(ID), STUFF(TITLE)
FROM TABLE_X

Ответы [ 2 ]

1 голос
/ 28 июня 2019

Синтаксис STUFF будет таким, как показано в этом коде ниже, чтобы получить желаемый результат -

SELECT B.NAME, COUNT(*) [COUNT],
STUFF((
    SELECT  ',' + A.TITLE 
    FROM TABLE_X A 
    WHERE A.NAME = B.NAME  
    FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '') TITLE
FROM TABLE_X B
GROUP BY  B.NAME

Вывод -

NAME    COUNT   TITLE
Bob     2       Cat,Bat
Tom     1       Mat
0 голосов
/ 28 июня 2019

Вы можете группировать по NAME и использовать агрегатную функцию STRING_AGG (начиная с SQL Server 2017)

SELECT NAME, COUNT(*) AS [COUNT], STRING_AGG(TABLE_X.TITLE, ', ') AS TITLE
FROM TABLE_X
GROUP BY NAME
ORDER BY NAME

Обратите внимание, что только столбцы, перечисленные в предложении GROUP BY, могут отображаться как есть в списке SELECT. Вы должны применить агрегатную функцию ко всем остальным. Я избежал псевдонима столбца COUNT, так как это зарезервированное слово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...