Объединить строки в SQL-запрос - PullRequest
0 голосов
/ 13 июня 2019

В моей базе данных SQL у меня есть несколько пользователей с несколькими группами. Так что теперь с моим текущим запросом у меня есть проблема, которую показывает мой запрос:

Actual query result

Есть ли способ получить результат запроса, например:

Desired result

Я уже пробовал 'group_concat', но мой sql-сервер не знает эту команду.

Ответы [ 3 ]

2 голосов
/ 13 июня 2019

Использование XML может быть возможным решением, особенно если вы еще не можете использовать STRING_AGG().

SELECT DISTINCT
    [ID],
    [user],
    STUFF((SELECT ', ' + [group]
           FROM [MyTable]
           WHERE [ID] = T.[ID] AND [user] = T.[user]
           FOR XML PATH('')), 1, 2, '') AS [groups]
FROM
    [MyTable] AS T

Подзапрос преобразует группы в строку XML-результата (ну, просто текст в этомдело).К каждой отдельной группе добавляется разделитель (', '), длина которого в этом случае составляет 2 символа.Первый разделитель должен быть удален из конечного результата, что делается с помощью функции STUFF.

0 голосов
/ 14 июня 2019

Посмотрите на ссылку ниже, когда у вас будет немного свободного времени.

https://www.red -gate.com / простой разговор / SQL / T-SQL-программирование / конкатенация-строка-значения-в-Transact-SQL /

Вы многому научитесь из этого ресурса.

SELECT *
FROM [NORTHWND].[dbo].[Products]

enter image description here

SELECT CategoryId,
           MAX( CASE seq WHEN 1 THEN ProductName ELSE '' END ) + ', ' +
           MAX( CASE seq WHEN 2 THEN ProductName ELSE '' END ) + ', ' +
           MAX( CASE seq WHEN 3 THEN ProductName ELSE '' END ) + ', ' +
           MAX( CASE seq WHEN 4 THEN ProductName ELSE '' END )
      FROM ( SELECT p1.CategoryId, p1.ProductName,
                    ( SELECT COUNT(*) 
                        FROM NORTHWND.dbo.Products p2
                        WHERE p2.CategoryId = p1.CategoryId
                        AND p2.ProductName <= p1.ProductName )
             FROM NORTHWND.dbo.Products p1 ) D ( CategoryId, ProductName, seq )
     GROUP BY CategoryId ;

enter image description here

0 голосов
/ 13 июня 2019

group_concat() относится к MySQL, поэтому его нельзя использовать в SQL Server.

Начиная с SQL Server 2017, используя функцию STRING_AGG(), это может быть возможно:

SELECT ID, [User], STRING_AGG ([group], ', ') AS [group]
FROM TableName
GROUP BY ID, [User]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...