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 SUM(IF(cpto_contable
= 1173 AND codigo_de_producto
IN(1,3) AND codigo_de_comercio
= 1, importe
, 0)) Suma1
, SUM(IF(cpto_contable
= 1174 AND codigo_de_producto
IN(1,3) AND codigo_de_comercio
= 1, importe
, 0)) Suma2
, SUM(IF(cpto_contable
= 1174 AND codigo_de_producto
!= 5 AND codigo_de_comercio
= 1, importe
, 0)) Suma4
, SUM(IF(cpto_contable
= 1174 AND codigo_de_producto
IN(1,3) AND codigo_de_comercio
!= 1, importe
, 0)) Suma5
AND concepto_contable
IN (1173,1174) 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.