2011-12-15 19 views
1

私はその人の名前とすべてのメールアドレスをコンマ区切りのリストとして選択したいと思います。私はそれがCOALESCEと関係があることを知っていますが、私はどのように分かっていません。ここに私がこれまで持っているものは次のとおりです:カンマ区切りリスト

select PersonName,EmailAddresses 
from dbo.Person 
JOIN (
    SELECT PersonID,COALESCE(EmailAddress,', ','') AS EmailAddresses 
    FROM dbo.Email 
) Email 
ON Email.PersonID = Person.PersonID 

現在、COALESCEは1人につき1つのメールアドレスを返しています。
私は関数を書く必要があるのだろうかと思います。

+2

可能重複http://stackoverflow.com/questions/3875979/retrieving-sql-relationships-as-a -comma-delimited-string) –

答えて

4

はこれを試してみてください:

select PersonName, 

(
SELECT 
    EmailAddress + ',' 
FROM 
    dbo.Email 
WHERE 
    Email.PersonID = Person.PersonID 
ORDER BY 
EmailAddress 
FOR XML PATH ('') 
) as emailAddresses 

from dbo.Person 

キーは、FOR XMLのPATH( '')である - 単一の文字列として一緒にこのグループの値。

+0

これはあなたのリストの末尾に末尾のカンマを残すことに注意してください - それが問題であれば、それを削除するためにいくつかの部分文字列呼び出しを含めることができます。または、コード側で処理してください。 –

+0

それだけではなく、私の同僚たちに、これがいかにクールであるかを示すホールを走って行った! –

+0

ええ、それはきちんとしたトリックです。私もそれについて学んだとき、私はかなり喜んでいました。 –

1

あなたはこれを試みることができる:

DECLARE @EmailAddress VARCHAR(4000) 

SELECT @EmailAddress = COALESCE(EmailAddress + ', ', '') 
FROM dbo.Email 
[カンマ区切りの文字列として取得SQL関係](の
+0

右ですが、これは単一の変数を返します。 –