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

Preguntas similare

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


Respuesta Responder a este mensaje
#2 Developers
16/12/2005 - 02:30 | Informe spam
La data que devuelve la consulta seria algo asi, adicionando las
columnas que falta agregar y es donde tengo ese problema.

Producto Ene Feb Mar Abr May Jun Jul Tot_Venta Co_Calcula Col_Acumula
111111 0 0 10 10 10 20 23 73 0.12 0.12
222222 0 0 10 10 10 22 0 52 0.09 0.21
333333 45 2 45 0 10 50 33 185 0.32 0.53
444444 0 0 10 0 0 70 45 125 0.22 0.75
555555 12 0 30 0 0 70 20 132 0.23 0.98
total Venta General 567

La Columna Co_Calcula sale de Tot_venta/Total Venta General osea
Producto 111111 es 73/567 = 0.12
Producto 222222 es 52/567 = 0.09
Producto 333333 es 185/567= 0.32

la Columan Col_Acumula Nace de la columna Co_calcula pero acumulada osea:

Producto 111111 es 0.00+0.12 = 0.12
Producto 222222 es 0.12+0.09 = 0.21
Producto 333333 es 0.21+0.32 = 0.53
Producto 444444 es 0.53+0.22 = 0.75

Espero que con este pequeño ejemplo puedas ayudarme

El resultado acumulado x Mes nace de una tabla de detalle de ventas

Gracias





Maxi [MVP] escribió:
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 :(
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida