Ayuda una consulta totalizada en sql2000

16/12/2005 - 00:10 por Developers | Informe spam
Amigos tengo una consulta con esta sentencia que me retorna las ventas
totalizadas mes a mes de cada producto
pero mi problema esta en que necesito dividir el total de ventas de todos
los productos entre total de venta del año de cada
producto(VTotalesdetodoslosproductos/Vtotaldelañocadaproducto). y tambien
necesito sumar el resultado de esa columna con la del siguiente producto
(fila x Fila) algo asi
como(productoA+productoB=productoC+productoB=productoD+productoC=productoE)

Adjunto sentencia que realiza el acumulado de mes a mes.

SELECT MV.PRODUCTOID, IT.DETALLEPROD, IT.MEDIDAPROD,
ENE_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 1 THEN SAL_ITE ELSE 0.00 END),
FEB_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 2 THEN SAL_ITE ELSE 0.00 END),
MAR_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 3 THEN SAL_ITE ELSE 0.00 END),
ABR_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 4 THEN SAL_ITE ELSE 0.00 END),
MAY_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 5 THEN SAL_ITE ELSE 0.00 END),
JUN_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 6 THEN SAL_ITE ELSE 0.00 END),
JUL_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 7 THEN SAL_ITE ELSE 0.00 END),
AGO_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 8 THEN SAL_ITE ELSE 0.00 END),
SET_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 9 THEN SAL_ITE ELSE 0.00 END),
OCT_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 10 THEN SAL_ITE ELSE 0.00
END),
NOV_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 11 THEN SAL_ITE ELSE 0.00
END),
DIC_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 12 THEN SAL_ITE ELSE 0.00 END)
FROM DETALLEALMACEN MV
JOIN M_PRODUCTO IT ON IT.PRODUCTOID=MV.PRODUCTOID
WHERE MV.ANULADA='N ' AND MV.TIPO_DOC='FACTURA'
GROUP BY MV.ANHO, MV.PRODUCTOID, IT.DETALLEPROD, IT.MEDIDAPROD

Lastimosamente tengo que hacerlo en el mismo Sqlserver ya que va a ser
consumido x cualquier tipo de aplicacion (Excel,Cristal Report,etc)

Nota:
Mi solucion seria usar cursores pero antes de aplicarlo, me gustaria que me
den algunos concejos o tal vez el uso de cursores no seria necesario.

Gracias

Developers Dany Acosta
 

Leer las respuestas

#1 Maxi [MVP]
16/12/2005 - 01:22 | Informe spam
Hola, no es necesario usar cursores, podrias usar tablas derivadas donde por
ej hagas

SELECT T1.ARTICULO,SUM(CANTIDAD) AS CANTIDAD,MES,T2.TOTAL_AÑO,
FROM T1 LEFT JOIN (SELECT ARTICULO,SUM(CANTIDAD) AS TOTAL_AÑO
FROM T1 WHERE FECHA >='20050101' AND FECHA < '20060101'
GROUP BY ARTICULO) T2
ON T1.ARTICULO = T2.ARTICULO
GROUP BY T1.ARTICULO,R2.TOTAL_AÑO


No se si me explico bien, ya que con tu ejemplo no me puedo basar porque no
tengo estructuras de tablas ni data de ejemplo :(

Salu2
-
[MVP] SQL Server
Orador para Culminis Latam
www.sqlgurus.org



"Developers" escribió en el mensaje
news:%
Amigos tengo una consulta con esta sentencia que me retorna las ventas
totalizadas mes a mes de cada producto
pero mi problema esta en que necesito dividir el total de ventas de todos
los productos entre total de venta del año de cada
producto(VTotalesdetodoslosproductos/Vtotaldelañocadaproducto). y tambien
necesito sumar el resultado de esa columna con la del siguiente producto
(fila x Fila) algo asi
como(productoA+productoB=productoC+productoB=productoD+productoC=productoE)

Adjunto sentencia que realiza el acumulado de mes a mes.

SELECT MV.PRODUCTOID, IT.DETALLEPROD, IT.MEDIDAPROD,
ENE_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 1 THEN SAL_ITE ELSE 0.00
END),
FEB_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 2 THEN SAL_ITE ELSE 0.00
END),
MAR_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 3 THEN SAL_ITE ELSE 0.00
END),
ABR_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 4 THEN SAL_ITE ELSE 0.00
END),
MAY_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 5 THEN SAL_ITE ELSE 0.00
END),
JUN_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 6 THEN SAL_ITE ELSE 0.00
END),
JUL_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 7 THEN SAL_ITE ELSE 0.00
END),
AGO_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 8 THEN SAL_ITE ELSE 0.00
END),
SET_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 9 THEN SAL_ITE ELSE 0.00
END),
OCT_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 10 THEN SAL_ITE ELSE 0.00
END),
NOV_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 11 THEN SAL_ITE ELSE 0.00
END),
DIC_ = SUM(CASE DATEPART(MONTH,MV.FECHA) WHEN 12 THEN SAL_ITE ELSE 0.00
END)
FROM DETALLEALMACEN MV
JOIN M_PRODUCTO IT ON IT.PRODUCTOID=MV.PRODUCTOID
WHERE MV.ANULADA='N ' AND MV.TIPO_DOC='FACTURA'
GROUP BY MV.ANHO, MV.PRODUCTOID, IT.DETALLEPROD, IT.MEDIDAPROD

Lastimosamente tengo que hacerlo en el mismo Sqlserver ya que va a ser
consumido x cualquier tipo de aplicacion (Excel,Cristal Report,etc)

Nota:
Mi solucion seria usar cursores pero antes de aplicarlo, me gustaria que
me
den algunos concejos o tal vez el uso de cursores no seria necesario.

Gracias

Developers Dany Acosta


Preguntas similares