I have two tables \"one to many\":
Table1
ID Name
1 Abe
2 David
3 Orly
Table2
ID email
1 a@zz
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
Results:
ID Name GroupConcat
-- ----- -----------------------------
1 Abe a@zz.com,ab@zz.com,abe@zz.com
2 David dav@zz.com,d@zz.com
3 Orly orly@zz.com,o@zz.com
One of the neatest ways to achieve this is to combine For XML Path and STUFF as follows:
SELECT
ID, Name,
Emails = STUFF((
SELECT ', ' + Email FROM Table2 WHERE Table2.ID = Table1.ID
FOR XML PATH ('')),1,2,'')
FROM Table1