SQL Server-在单行中返回多行值
我得到了这个表,其中有SQL Server中3名员工的电子邮件地址 表结构是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
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,可能有帮助可能有帮助