1

我知道你可以这样做,因为我以前看过一次,但我忘记了在哪里,直到现在我不需要这样做。

我有一个名为Employees 的表,它有各种员工数据(duh)。我需要一个查询,它将对表中所有行的名字和姓氏进行选择,然后将它们全部连接成一个逗号分隔的字符串。

例如,我有几行(实际上比这多得多,但为了这个问题,只假设两行)看起来像这样的数据:

FName LName
-------- -----
理查德·普雷斯科特
吉尔森提瑞
卡罗尔·温格

我需要一个可以以这种形式返回上述数据的选择:

理查德·普雷斯科特、吉尔·森提耶里、卡罗尔·温格

预先感谢您的帮助!

4

6 回答 6

8

使用合并。像这样的东西:

DECLARE @Names varchar(1000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM Employees
于 2009-04-30T19:29:01.027 回答
2

这是我发现的最有效的方法。它需要 SQL Server,但听起来这就是您正在使用的。

select stuff((
    select ', ' + fName + ' ' + lName
    from Employees
    order by lName, fName /* Optional */
    for xml path('')
), 1, 2, '');

这个想法是,您可以利用将空标记名称与 for xml path('') 一起使用的能力来获取跨行的字符串连接。stuff(...,1,2,'') 只是删除了前导逗号。

这真的很快。

于 2009-04-30T22:22:53.607 回答
1

你可以写一个UDF来做到这一点

CREATE FUNCTION [dbo].[fnc_GetEmpList](
@CompId numeric
) RETURNS nvarchar(1000)
BEGIN

declare @str nvarchar(1000)
set @str =''

select  @str = @str + ',' + FirstName + ' ' + LastName from Employees


--remove the last comma
if(@str<>'')
    set @str = right(@str,len(@str)-1)

return @str


END
于 2009-04-30T19:27:29.207 回答
0

也许这会有所帮助。这个问题以前有人问过。 如何创建 SQL Server 函数以将子查询中的多行“加入”到单个分隔字段中?

于 2009-04-30T19:28:58.733 回答
0

如果你使用 MySQL,他们有一个很棒的函数 GROUP_CONCAT 可以做到这一点。http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat

于 2009-04-30T19:35:10.047 回答
0

这并不完美,但它会让你大部分时间到达那里

declare @count int
declare @i int
declare @string nvarchar(max)
declare @name nvarchar(100)

declare @Employees (EmpName nvarchar(100), ID int identity(1,1)

insert into @Employees (EmpName)
select FirstName + ' ' + LastName
from Employees


select @count=count(*) from @Employees
set @i=1
set @string=''


while (@i<=@count)
begin

    select @name = EmpName from @Employees where ID=@i

    set @string = @string + ',' + @name

    set @i=@i+1
end
于 2009-04-30T19:36:38.577 回答