Подтвердить что ты не робот

Как получить несколько строк в одну строку в виде строки?

У меня есть две таблицы "один ко многим":

Таблица1

ID    Name
1     Abe
2     David
3     Orly

Table2

ID    email
1     [email protected]
1     [email protected]
1     [email protected]
2     [email protected]
2     [email protected]
3     [email protected]
3     [email protected]

Мне нужен вывод следующим образом:

1 Abe [email protected], [email protected], [email protected]
2 David [email protected], [email protected]
3 Orly [email protected], [email protected]

Я знаю, что это не сработает, потому что внутренний SELECT не является отдельной строкой:

SELECT 
    ID, Name, 
    (SELECT email FROM Table2  WHERE Table2.ID = Table1.ID) AS emails 
FROM Table1

Я попытался применить:

DECLARE @emails VARCHAR(999)

SELECT [ID],[Name], 
     (SELECT @emails = COALESCE(@emails + ', ', '') + [email] 
      FROM Table2) AS 'emails' 
FROM Table1

но не повезло.

Как это можно решить?

Спасибо.

4b9b3361

Ответ 1

Один из самых простых способов добиться этого - объединить для пути XML и STUFF следующим образом:

SELECT
    ID, Name, 
    Emails = STUFF((
        SELECT ', ' + Email FROM Table2 WHERE Table2.ID = Table1.ID
        FOR XML PATH ('')),1,2,'')
FROM Table1