Hola grupo, tengo la sgte duda. espero me puedan ayudar.
Tengo una tabla donde reflejo los saldos de mis articulos
por almacen.
CodigoAlmacen | CodigoArticulo | Cantidad
A XXXX1 10
B XXXX1 20
C XXXX1 0
A XXXN1 5
B XXXF1 10
Me pidieron un reporte que me muestre:
CodigoArticulo, Almacen A, Almacen B, Almacen C
XXXX1 10 20 0
XXXN1 5 0 0
XXXF1 0 10 0
Para no tener que convertir, filas en columnas, y como conozco
los codigos de almacen que tengo, hice lo sgte.
SELECT S.CodigoArticulo, A.Descripcion, SUM(Libertadores)Libertadores,
SUM(Merino) Merino,
SUM(Chorrillos) Chorrillos, SUM(Taller) Taller, SUM(Destruccion)
Destruccion
FROM (SELECT Codigoarticulo, CodigoAlmacen,
CASE WHEN CodigoAlmacen='DES' THEN Cantidad ELSE 0 END AS Destruccion,
CASE WHEN CodigoAlmacen='TA' THEN Cantidad ELSE 0 END AS Taller,
CASE WHEN CodigoAlmacen='TC' THEN Cantidad ELSE 0 END AS Chorrillos,
CASE WHEN CodigoAlmacen='TM' THEN Cantidad ELSE 0 END AS Merino,
CASE WHEN CodigoAlmacen='TS' THEN Cantidad ELSE 0 END AS Libertadores
FROM ArticulosSaldos) S INNER JOIN Articulo A ON
S.CodigoArticulo = A.CodigoArticulo
GROUP BY S.CodigoArticulo, A.Descripcion
ORDER BY S.CodigoArticulo
Lo que quiero saber es si hay alguna forma de convertir el SELECT interno en
dinamico,
de forma tal que si aumenta un codigo de almacen aumente tambien un CASE
WHEN
buscando ese codigo. Lo trate de hacer en un store procedure, cambiando el
SELECT interno
por una variable, pero al pasar comillas simple a la variable me sale error.
DECLARE @SubConsulta NVARCHAR(1000)
DECLARE @ConsultaTotal NVARCHAR(1000)
SET @ConsultaTotal = 'SELECT S.CodigoArticulo, A.Descripcion,
SUM(Libertadores)Libertadores, SUM(Merino) Merino,
SUM(Chorrillos) Chorrillos, SUM(Taller) Taller, SUM(Destruccion)
Destruccion
FROM ('+ @SubConsulta + ') S INNER JOIN Articulo A ON
S.CodigoArticulo = A.CodigoArticulo
GROUP BY S.CodigoArticulo, A.Descripcion
ORDER BY S.CodigoArticulo'
EXEC (@ConsultaTotal)
Muchas gracias por su ayuda.
Leer las respuestas