список через запятую - PullRequest
       1

список через запятую

1 голос
/ 15 декабря 2011

Я хотел бы выбрать имя человека и все его адреса электронной почты в виде списка через запятую. Я знаю, что это как-то связано с 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 адрес электронной почты на человека.
Интересно, нужно ли мне написать функцию?

Ответы [ 2 ]

4 голосов
/ 15 декабря 2011

Попробуйте это:

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 ('') - он группирует значения в одну строку.

1 голос
/ 15 декабря 2011

Не могли бы вы попробовать это:

DECLARE @EmailAddress VARCHAR(4000)

SELECT @EmailAddress = COALESCE(EmailAddress + ', ', '')
FROM dbo.Email 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...