¿Concatenar una columna seleccionada en una sola consulta?
-
03-07-2019 - |
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!
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
Quizás esto pueda ayudar. Esta pregunta ya se ha hecho antes. Cómo crear una función de SQL Server para unir " múltiples filas de una subconsulta en un solo campo delimitado?
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