Ver Mensaje Individual
  #6 (permalink)  
Antiguo 18/06/2013, 18:42
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Una parte del problema es que estás mirando los resultados como una tabla de Excel, y no es el caso. Tienes que pensarlo y describirlo como un resultado de una consulta SQL, que no se escribe ni se evalúa de la misma forma.
Este conjunto de fórmulas:
Cita:
1) SUMA((GRP_CONTABLE=6)*(CPTO_CONTABLE=1173)*(TP_FAC TURA=220)*SI((Cod_Producto=1)+(Cod_Producto=3);1)* (Cod_Comercio = "000000000000001")*MONTO)

2) SUMA((GRP_CONTABLE=6)*(CPTO_CONTABLE=1174)*(TP_FAC TURA=220)*(Cod_Comercio = "000000000000001")*SI((Cod_Producto=1)+(Cod_Pr oduc to=3);1)*MONTO)

4) SUMA((GRP_CONTABLE=6)*(CPTO_CONTABLE=1173)*(TP_FAC TURA=220)*(Cod_Producto<>5)*(Cod_Comercio <> "000000000000001")*MONTO)

5) SUMA((GRP_CONTABLE=6)*(CPTO_CONTABLE=1174)*(TP_FAC TURA=220)*(Cod_Comercio <> "000000000000001")*SI((Cod_Producto=1)+(Cod_Pr oduc to=3);1)*MONTO)
resulta terriblemente confuso, porque no podemos separar mentalmente las condiciones que existen para cada resultado. Eso es lo que se te pide que clarfiques: ¿Qué es lo que cada una calcula?
Piensa que para nosotros, que nos digas:
Cita:
pero en la suma tercera y cuarta la condicion cambia seria codigo_de_comercio<>1
Nos llevaría a pensar que las dos consultas finales calculan lo mismo... y no parece ser así.

En otras palabras: ¿Qué representa cada calculo? ¿El total de qué? Qué condiciones se cumplen en cada caso (descriptas separadamente)?

Bueno, tratemos de entender las sumas que intentas lograr:
Suma 1:
Cita:
SUMA(
(GRP_CONTABLE=6) * (CPTO_CONTABLE=1173) * (TP_FAC TURA=220) *
SI((Cod_Producto=1) + (Cod_Producto=3);1) * (Cod_Comercio = "000000000000001") *MONTO)
Es decir que si:
- Grupo_contable = 6
- Concepto Contable = 1173
- TP Factura = 220
- Codigo Producto = 1 ó Codigo Producto = 3
- Código Comercio = 1
Entonces suma MONTO

Suma 2:
Cita:
SUMA(
(GRP_CONTABLE=6) * (CPTO_CONTABLE=1174) * (TP_FAC TURA=220) * (Cod_Comercio = "000000000000001") *
SI((Cod_Producto=1) + (Cod_Produc to=3);1) * MONTO)
Es decir que si:
- Grupo_contable = 6
- Concepto Contable = 1174
- TP Factura = 220
- Codigo Producto = 1 ó Codigo Producto = 3
- Código Comercio = 1
Entonces suma MONTO


Suma 4:
Cita:
SUMA(
(GRP_CONTABLE=6) * (CPTO_CONTABLE=1173) * (TP_FAC TURA=220) * (Cod_Producto<>5) * (Cod_Comercio <> "000000000000001") * MONTO)
Es decir que si:
- Grupo_contable = 6
- Concepto Contable = 1173
- TP Factura = 220
- Codigo Producto <> 5
- Código Comercio = 1
Entonces suma MONTO


Suma 5:
Cita:
SUMA(
(GRP_CONTABLE=6) * (CPTO_CONTABLE=1174) * (TP_FAC TURA=220) * (Cod_Comercio <> "000000000000001") *
SI((Cod_Producto=1) + (Cod_Produc to=3);1) * MONTO)
Es decir que si:
- Grupo_contable = 6
- Concepto Contable = 1174
- TP Factura = 220
- Codigo Producto = 1 ó Codigo Producto = 3
- Código Comercio <> 1
Entonces suma MONTO

En escecia, hay algunas condiciones comunes y un par que cabian.
La solución andaría mas o menos cerca de lo que hiciste:
Código MySQL:
Ver original
  1.     SUM(IF(cpto_contable = 1173 AND codigo_de_producto IN(1,3) AND codigo_de_comercio = 1, importe, 0)) Suma1,
  2.     SUM(IF(cpto_contable = 1174 AND codigo_de_producto IN(1,3) AND codigo_de_comercio = 1, importe, 0)) Suma2,
  3.     SUM(IF(cpto_contable = 1174 AND codigo_de_producto != 5 AND codigo_de_comercio = 1, importe, 0)) Suma4,
  4.     SUM(IF(cpto_contable = 1174 AND codigo_de_producto IN(1,3) AND codigo_de_comercio != 1, importe, 0)) Suma5
  5. FROM mpj15005_copy
  6. WHERE grupo_contable = 6
  7.     AND concepto_contable IN (1173,1174)
  8.     AND tipo_de_factura = 220;
Esta sería una de las formas más rápidas. Otras más simples en sintaxis necesitarían de varias consultas unidas con un JOIN, pero no serían tan eficientes. El problema para hacerlo en una única consulta es que las cuatro tienen condiciones interexcluyentes, por lo que no puedes lograrlo de modo simple.
Hay una consideración que debes tener en cuenta: La tercera consulta está incluyendo valores ya calculados para la primera, y la cuarta está incluyendo los de la tercera.
Es decir: La información, dependiendo del contexto, puede no ser fiable, porque existe redundancia lógica y solapamiento en el cálculo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 18/06/2013 a las 19:20