nativas - que es una funcion agregada en sql
¿Cómo devolver múltiples valores en una columna(T-SQL)? (9)
Bueno ... Veo que ya se aceptó una respuesta ... pero creo que deberías ver otras soluciones de todos modos:
/* EXAMPLE */
DECLARE @UserAliases TABLE(UserId INT , Alias VARCHAR(10))
INSERT INTO @UserAliases (UserId,Alias) SELECT 1,''MrX''
UNION ALL SELECT 1,''MrY'' UNION ALL SELECT 1,''MrA''
UNION ALL SELECT 2,''Abc'' UNION ALL SELECT 2,''Xyz''
/* QUERY */
;WITH tmp AS ( SELECT DISTINCT UserId FROM @UserAliases )
SELECT
LEFT(tmp.UserId, 10) +
''/ '' +
STUFF(
( SELECT '', ''+Alias
FROM @UserAliases
WHERE UserId = tmp.UserId
FOR XML PATH('''')
)
, 1, 2, ''''
) AS [UserId/Alias]
FROM tmp
/* -- OUTPUT
UserId/Alias
1/ MrX, MrY, MrA
2/ Abc, Xyz
*/
Tengo una tabla UserAliases
( UserId, Alias
) con múltiples alias por usuario. Necesito consultarlo y devolver todos los alias para un usuario dado, el truco es devolverlos todos en una columna.
Ejemplo:
UserId/Alias
1/MrX
1/MrY
1/MrA
2/Abc
2/Xyz
Quiero que el resultado de la consulta tenga el siguiente formato:
UserId/Alias
1/ MrX, MrY, MrA
2/ Abc, Xyz
Gracias.
Estoy usando SQL Server 2005.
ps consulta real T-SQL sería apreciada :)
Eche un vistazo a este hilo que ya está en , le brinda convenientemente un ejemplo de T-SQL.
Lo siento, lea la pregunta equivocada la primera vez. Puedes hacer algo como esto:
declare @result varchar(max)
--must "initialize" result for this to work
select @result = ''''
select @result = @result + alias
FROM aliases
WHERE username=''Bob''
Mi jefe escribió un artículo sobre este camino de regreso en 2003: Concatenación con COALESCE
Puede recorrer las filas con un cursor y anexar a un campo en una tabla temporal, o puede usar la función COALESCE para concatenar los campos.
Puede usar una función con COALESCE.
CREATE FUNCTION [dbo].[GetAliasesById]
(
@userID int
)
RETURNS varchar(max)
AS
BEGIN
declare @output varchar(max)
select @output = COALESCE(@output + '', '', '''') + alias
from UserAliases
where userid = @userID
return @output
END
GO
SELECT UserID, dbo.GetAliasesByID(UserID)
FROM UserAliases
GROUP BY UserID
GO
esta es una de las maneras más rápidas y sencillas de hacer lo que necesita sin la necesidad de una UDF: http://weblogs.sqlteam.com/mladenp/archive/2007/06/01/60220.aspx
hay otra forma de usar una tabla de números que es más rápida para conjuntos de datos realmente grandes, pero no creo que la necesites.
group_concat () suena como lo que estás buscando.
http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat
ya que estás en mssql, simplemente busqué en Google "group_concat mssql" y encontré varios hits para recrear la funcionalidad group_concat. aquí está uno de los éxitos que encontré:
DECLARE @Str varchar(500)
SELECT @Str=COALESCE(@Str,'''') + CAST(ID as varchar(10)) + '',''
FROM dbo.fcUser
SELECT @Str