Pregunta

Sé que puedes hacer esto, porque lo he visto una vez antes, pero olvido dónde y hasta ahora no he necesitado hacerlo.

Tengo una tabla llamada Empleados, y tiene varios datos de empleados (duh). Necesito una consulta que haga una selección en el nombre y apellido de todas las filas de la tabla, y luego las contenga en una cadena delimitada por comas.

Por ejemplo, tengo algunas filas (mucho más que eso en realidad, pero en aras de esta pregunta, solo asuma dos) de datos que se ven así:

FName    LName
-------  -----
Richard  Prescott
Jill     Sentieri
Carol    Winger

Necesito una selección que pueda devolver los datos antes mencionados en este formulario:

Richard Prescott, Jill Sentieri, Carol Winger

¡Gracias de antemano por su ayuda!

¿Fue útil?

Solución

Usar fusión. Algo como esto:

DECLARE @Names varchar(1000)
SELECT @Names = COALESCE(@Names + ', ', '') + Name
FROM Employees

Otros consejos

Este es el método más eficiente que he encontrado. Requiere SQL Server, pero parece que eso es lo que estás usando.

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

La idea es que puede aprovechar la capacidad de usar un nombre de etiqueta vacío para xml path ('') para obtener la concatenación de cadenas en las filas. El material (..., 1,2 '') simplemente elimina la coma inicial.

Esto es REALMENTE rápido.

puedes escribir un UDF para hacer eso

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

Si está utilizando MySQL, tienen una gran función llamada GROUP_CONCAT que hace exactamente eso. http: //dev.mysql. com / doc / refman / 5.0 / es / group-by-functions.html # function_group-concat

esto no es perfecto, pero te llevará la mayor parte del camino

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
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top