1

SQLServerの3人の従業員の電子メールアドレスを持つこのテーブルがあります

テーブル構造は

EmployeeId, EmployeeName, Employee email address

データは次のようになります。

1   Conrad   Conrad@test.com

必要な出力は、1行/1列の電子メールアドレスです。

conrad@test.com; ali@test.com; will@test.com

誰か助けてくれませんか。

4

4 に答える 4

3

これを試すことができます: SQL Fiddle

SELECT SUBSTRING(
(SELECT ';' + e.EmailAddress
FROM Employee e
FOR XML PATH('')),2,8000) AS CSV

SQL Server 2005 以降。詳細はこちら

于 2012-08-29T07:27:36.097 に答える
1

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
于 2012-08-29T07:29:34.457 に答える
1

で試すことができます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 を返します。

于 2012-08-29T07:36:46.733 に答える
0

そのためにカーソルを使用できます。

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 を返すことができます

于 2012-08-29T07:32:14.063 に答える