Ver Mensaje Individual
  #11 (permalink)  
Antiguo 28/04/2010, 16:14
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: 16 años, 5 meses
Puntos: 2658
Respuesta: Unir tablas en un renglon

Creo que por aquí anda la solución, y la respuesta al misterio.
Aclaro que volví a escribir la totalidad de la consulta para hacerla entendible en forma secuencial.
El problema viene por dos partes:
1) Se requiere que el segundo LEFT JOIN relacione las compras hechas en la misma fecha, de lo contrario los registros se repiten.
2) Nunca, NUNCA se almacenan valores con la sigla de su unidad de medida. El problema de la unidad de medida es una cuestión de representación en la aplicación, y no pertenece a la base de datos. Además, se requieren más caracteres para representar "100000" que para almacenar 10000.
La idea sería:
Código MySQL:
Ver original
  1.   DISTINCT(C.codcliente) `Cod. Cliene`,
  2.   C.nombre `Nombre`,
  3.   IFNULL(SUM(R.importetotal), 0)  `Importe RES`,
  4.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) `Peso .RES`,
  5.   COUNT(R.peso) `Ventas ACHURA`,
  6.   IFNULL(SUM(A.importeventaachura), 0) `Importe Total ACHURA`,
  7.   IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Peso ACHURA`,
  8.   COUNT(A.peso) `Ventas RES`,
  9.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) + IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Total Peso`,
  10.   IFNULL(SUM(R.importetotal), 0)  + IFNULL(SUM(A.importeventaachura), 0) `Total valor`
  11. FROM clientes C
  12.   LEFT JOIN res R ON C.codcliente = R.codcliente
  13.   LEFT JOIN achuras A ON C.codcliente = A.codcliente AND R.fecha_salida = A.fecha_salida
  14. GROUP BY C.codcliente;
  15.  
  16. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  17. | Cod. Cliene | Nombre   | Importe RES | Peso .RES | Ventas ACHURA | Importe Total ACHURA | Peso ACHURA | Ventas RES | Total Peso | Total valor |
  18. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  19. |           1 | julian   |        6000 |       600 |             2 |                    0 |           0 |          0 |        600 |        6000 |
  20. |           2 | isaura   |        2400 |       240 |             4 |                 1000 |         100 |          2 |        340 |        3400 |
  21. |           3 | santiago |        8000 |       800 |             1 |                    0 |           0 |          0 |        800 |        8000 |
  22. |           4 | madre    |       18000 |      1800 |             3 |                  500 |         500 |          1 |       2300 |       18500 |
  23. |           5 | david    |        9000 |       900 |             1 |                    0 |           0 |          0 |        900 |        9000 |
  24. +-------------+----------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+

Si a esto le ponemos la condición de fecha:
Código MySQL:
Ver original
  1.   DISTINCT(C.codcliente) `Cod. Cliene`,
  2.   C.nombre `Nombre`,
  3.   IFNULL(SUM(R.importetotal), 0)  `Importe RES`,
  4.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) `Peso .RES`,
  5.   COUNT(R.peso) `Ventas ACHURA`,
  6.   IFNULL(SUM(A.importeventaachura), 0) `Importe Total ACHURA`,
  7.   IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Peso ACHURA`,
  8.   COUNT(A.peso) `Ventas RES`,
  9.   SUM(CAST(REPLACE(R.peso, ' kg','') AS UNSIGNED)) + IFNULL(SUM(CAST(REPLACE(A.peso, ' kg','') AS UNSIGNED)), 0) `Total Peso`,
  10.   IFNULL(SUM(R.importetotal), 0)  + IFNULL(SUM(A.importeventaachura), 0) `Total valor`
  11. FROM clientes C
  12.   LEFT JOIN res R ON C.codcliente = R.codcliente
  13.   LEFT JOIN achuras A ON C.codcliente = A.codcliente AND R.fecha_salida = A.fecha_salida
  14. WHERE A.fecha_salida = '2010-04-26' AND A.fecha_salida = '2010-04-26'
  15. GROUP BY C.codcliente;
  16.  
  17. +-------------+--------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  18. | Cod. Cliene | Nombre | Importe RES | Peso .RES | Ventas ACHURA | Importe Total ACHURA | Peso ACHURA | Ventas RES | Total Peso | Total valor |
  19. +-------------+--------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
  20. |           2 | isaura |        1200 |       120 |             2 |                 1000 |         100 |          2 |        220 |        2200 |
  21. |           4 | madre  |        6000 |       600 |             1 |                  500 |         500 |          1 |       1100 |        6500 |
  22. +-------------+--------+-------------+-----------+---------------+----------------------+-------------+------------+------------+-------------+
Nota: Me vi obligado a usar la función REPLACE para quitar la basura del campo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)