Как получить несколько строк в одну строку в виде строки?
У меня есть две таблицы "один ко многим":
Таблица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
но не повезло.
Как это можно решить?
Спасибо.
Ответы
Ответ 1
Один из самых простых способов добиться этого - объединить для пути XML и STUFF следующим образом:
SELECT
ID, Name,
Emails = STUFF((
SELECT ', ' + Email FROM Table2 WHERE Table2.ID = Table1.ID
FOR XML PATH ('')),1,2,'')
FROM Table1
Ответ 2
SELECT *
FROM Table1 a
CROSS APPLY --or OUTER APPLY
(
SELECT SUBSTRING(
(SELECT ','+b.Email
FROM Table2 b
WHERE a.ID = b.ID
FOR XML PATH(''))
,2
,4000) GroupConcat
) x
Результаты:
ID Name GroupConcat
-- ----- -----------------------------
1 Abe [email protected],[email protected],[email protected]
2 David [email protected],[email protected]
3 Orly [email protected],[email protected]