Salida delimitada por comas en una consulta en lugar de un conjunto de filas

25 07 2008

Hay ocasiones en que se necesitamos obtener el resultado de una consulta como un conjunto de valores delimitados por comas en una sola fila, en lugar de un conjunto de filas, para este menester podemos obtenerlo de dos formas distintas.

1.- Mediante un cursor:

DECLARE cursorIDs CURSOR FOR
	SELECT CLAVE FROM PRODUCTOS
	ORDER BY CLAVE
DECLARE @CodigoIDs    VARCHAR(8000)
DECLARE @CodigoID     VARCHAR(10)

OPEN cursorIDs
FETCH NEXT FROM cursorIDs INTO @CodigoID
WHILE @@FETCH_STATUS = 0
BEGIN
	SET @CodigoIDs = ISNULL(@CodigoIDs + ',', '') + @CodigoID
	FETCH NEXT FROM cursorIDs INTO @CodigoID
END

CLOSE cursorIDs
DEALLOCATE cursorIDs

SELECT @CodigoIDs AS Codigos_Productos
GO

o bien,

2.- De la siguiente forma:

DECLARE @CodigoIDs VARCHAR(8000)

SELECT @CodigoIDs = ISNULL(@CodigoIDs + ',', '') +
	CAST (CLAVE AS VARCHAR)
FROM PRODUCTOS
	ORDER BY CLAVE

SELECT @CodigoIDs AS Codigos_Productos
GO

Esta última es mas elegante, pero como dicen, en gustos se rompen géneros.

La salida debe ser algo como:

0,1,2,3,4,5,6,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22

Estos códigos estan probados en el QueryAnalizer, pero es muy sencillo pasarlo a un Stored Procedure

Esta dato fue encontrado en esta dirección, en donde pueden encontrar más información al respecto. Asi mismo, en el apartado de tips & tricks se encuentran mas trucos y tips sobre SQL, que siempre es bueno tener a la mano para cuando se necesite.

Saludos


Acciones

Información

Deja un comentario