Объединить строку из нескольких строк на сервере SQL - PullRequest
0 голосов
/ 23 марта 2020

Я хочу создать представление, в котором запись в моем представлении является объединенной строкой. В данном случае это ParticipantNames.

У меня есть две таблицы. A Trips стол и Participants стол. Одна поездка может иметь от одного до нескольких участников. Поэтому в моей таблице Participant есть несколько строк, связанных с одной записью в таблице Trip.

Можно ли создать строку, объединяющую имена всех участников и вставить ее в столбец ParticipantNames? например, "Ганс, Бен, Али"

CREATE OR ALTER VIEW TripView 
AS
    SELECT
        Id  = Trip .Id,
        ParticipantNames = ???
    FROM    
        [dbo].Trip Trip 
    LEFT JOIN 
        [dbo].[Participants] Participants ON Participants.TripId = Trip.Id

Ответы [ 2 ]

2 голосов
/ 23 марта 2020

Вы можете использовать string_agg() в более поздних версиях SQL Сервер:

 SELECT t.Id, string_agg(p.name, ', ') as ParticipantNames
 FROM  [dbo].Trip t LEFT JOIN 
       [dbo].[Participants] p
       ON p.TripId = t.Id
 GROUP BY t.Id;
1 голос
/ 23 марта 2020

Для версий более ранних, чем SQL Server 2017, вы можете использовать FOR XML PATH, для объединения строк

SELECT 
    T.Id, 
    STUFF((SELECT ','+p.name
           FROM dbo.participants p
           WHERE p.TripId = T.Id
           FOR XML PATH('')), 1, 1, '') AS ParticipantNames
FROM [dbo].Trip T
GROUP BY T.Id;

Начиная с SQL Server 2017 и далее, вы можете go вперед с Gordon Линофф раствор.

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