SQLServerの3人の従業員の電子メールアドレスを持つこのテーブルがあります
テーブル構造は
EmployeeId, EmployeeName, Employee email address
データは次のようになります。
1 Conrad Conrad@test.com
必要な出力は、1行/1列の電子メールアドレスです。
conrad@test.com; ali@test.com; will@test.com
誰か助けてくれませんか。
SQLServerの3人の従業員の電子メールアドレスを持つこのテーブルがあります
テーブル構造は
EmployeeId, EmployeeName, Employee email address
データは次のようになります。
1 Conrad Conrad@test.com
必要な出力は、1行/1列の電子メールアドレスです。
conrad@test.com; ali@test.com; will@test.com
誰か助けてくれませんか。
これを試すことができます: SQL Fiddle
SELECT SUBSTRING(
(SELECT ';' + e.EmailAddress
FROM Employee e
FOR XML PATH('')),2,8000) AS CSV
SQL Server 2005 以降。詳細はこちら
FOR XML PATH()
は、SQL Server に適したソリューションです。
WITH x AS (
SELECT 'x@example.com' AS mail
UNION
SELECT 'y@example.com'
UNION
SELECT 'z@example.com'
)
SELECT
STUFF((SELECT
mail + ','
FROM
x
FOR XML PATH(''), TYPE, ROOT).value('root[1]', 'nvarchar(max)'), 1, 1, '')
上記のクエリは を返します@example.com,y@example.com,z@example.com,
。
あなたの場合、クエリは次のようになります(エラーが含まれる可能性があります):
SELECT
EmployeeId,
EmployeeName,
(SELECT
STUFF((SELECT
[e.email address] + ','
FROM
employees e
WHERE
e.EmployeeId = EmployeeId
FOR XML PATH(''), TYPE, ROOT).value('root[1]', 'nvarchar(max)'), 1, 1, '')) AS mails
FROM
employees
で試すことができますCOALESCE
DECLARE @listStr VARCHAR(MAX)
select @listStr = COALESCE(@listStr+',','') + Employee_email_address from table1 where EmployeeId = @EmployeeId
select @listStr
上記のクエリは、@example.com,y@example.com,z@example.com を返します。
そのためにカーソルを使用できます。
DECLARE @email VARCHAR(256)
DECLARE @EmailCollection VARCHAR(MAX)
DECLARE db_cursor CURSOR FOR
SELECT Email
FROM tableName
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @email
WHILE @@FETCH_STATUS = 0
BEGIN
SET @EmailCollection = @EmailCollection + @email + ';'
FETCH NEXT FROM db_cursor INTO @email
END
CLOSE db_cursor
DEALLOCATE db_cursor
そして最後に @EmailCollection を返すことができます