SQL Server-在单行中返回多行值

SQL Server-在单行中返回多行值,sql,sql-server,Sql,Sql Server,我得到了这个表,其中有SQL Server中3名员工的电子邮件地址 表结构是 EmployeeId, EmployeeName, Employee email address 数据如下: 1 Conrad Conrad@test.com 我需要的输出是单行/单列中的电子邮件地址: conrad@test.com; ali@test.com; will@test.com 有人能帮忙吗。你可以试试这个: 从SQLServer2005开始 您可以尝试以下方法: 从SQLServer200

我得到了这个表,其中有SQL Server中3名员工的电子邮件地址

表结构是

EmployeeId, EmployeeName, Employee email address
数据如下:

1   Conrad   Conrad@test.com
我需要的输出是单行/单列中的电子邮件地址:

conrad@test.com; ali@test.com; will@test.com
有人能帮忙吗。

你可以试试这个:

从SQLServer2005开始

您可以尝试以下方法:

从SQLServer2005开始

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
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

您可以使用游标来实现这一点

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

,您可以使用游标进行返回

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

,您可以尝试使用COALESCE

以上查询将返回@example.com,y@example.com,z@example.com,

您可以尝试使用COALESCE

以上查询将返回@example.com,y@example.com,z@example.com,

可能有帮助可能有帮助