SQL Server: объединить несколько строк в одну строку из таблицы объединения? - PullRequest
0 голосов
/ 14 октября 2019

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

SELECT ID, Data1, DataFromTable2
FROM Table1
LEFT JOIN Table2 on Table1.ID = Table2.ID
WHERE ID = 1

Я пытаюсь объединить две таблицы, где Table2 (которая содержит несколько строк с одинаковым идентификатором). И я хочу, чтобы несколько строк в одну строку.

Я нашел здесь пост, который объединяет несколько строк в одну. SQL Server: объединение нескольких строк в одну строку

DECLARE @combinedString VARCHAR(MAX)
SELECT @combinedString = COALESCE(@combinedString + ', ', '') + stringvalue
FROM jira.customfieldValue
WHERE customfield = 12534
AND ISSUE = 19602

SELECT @combinedString as StringValue 

Но мне трудно применить его к вышеуказанному запросу.

1 Ответ

2 голосов
/ 14 октября 2019

Используйте запрос GROUP BY с STRING_AGG:

SELECT
    t1.ID,
    t1.Data1,
    STRING_AGG(t2.DataFromTable2, ',') AS data
FROM Table1 t1
LEFT JOIN Table2 t2
    ON t1.ID = t2.ID
GROUP BY
    t1.ID,
    t1.Data1
WHERE
    t1.ID = 1;

Я предполагаю, что вы используете SQL Server 2017 или более позднюю версию. Для более ранних версий SQL Server:

SELECT
    t1.ID,
    t1.Data1,
    data = STUFF((
      SELECT ',' + t2.DataFromTable2
      FROM Table2 t2
      WHERE t2.ID = t1.ID
      FOR XML PATH(''), TYPE).value('.', 'NVARCHAR(MAX)'), 1, 1, '')
FROM Table1 t1;
...