Ver Mensaje Individual
  #4 (permalink)  
Antiguo 09/10/2012, 07:20
Avatar de dmassive
dmassive
 
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 23 años
Puntos: 7
De acuerdo Respuesta: Consulta con LEFT JOIN, SUM y GROUP BY se me triplican datos

Hola Gracias GeriReshef! El campo clave de tabla1_facturas es id. Funciona bien, solo le tuve agregar en el group by "fa.importe", por lo tanto quedo así:

Código SQL:
Ver original
  1. SELECT  fa.id,
  2.         SUM(nac.importe),
  3.         SUM(prov.importe),
  4.         fa.importe - SUM(nac.importe_primario) - SUM(prov.importe_primario)
  5. FROM    tabla1_facturas fa
  6. LEFT JOIN (SELECT   idfactura,
  7.                 SUM(importe) importe,
  8.                 SUM(importe_primario) importe_primario
  9.         FROM    tabla2_impuestos_nacionales
  10.         GROUP BY idfactura) nac
  11.             ON fa.id = nac.idfactura
  12. LEFT JOIN (SELECT idfactura,
  13.                 SUM(importe) importe,
  14.                 SUM(importe_primario) importe_primario
  15.         FROM    tabla3_impuestos_provinciales
  16.         GROUP BY idfactura) prov
  17.             ON fa.id = prov.idfactura
  18. GROUP BY fa.id, fa.importe
  19. ORDER BY fa.id DESC

Bien joya, eso me sirve!, ahora no entiendo por qué las lineas 7 y 13 "Sum(importe) importe", de todas maneras las elimine y el código quedo finalmente así:

Código SQL:
Ver original
  1. SELECT  fa.id,
  2.         SUM(nac.importe),
  3.         SUM(prov.importe),
  4.         fa.importe - SUM(nac.importe_primario) - SUM(prov.importe_primario)
  5. FROM    tabla1_facturas fa
  6. LEFT JOIN (SELECT   idfactura,
  7.                 SUM(importe_primario) importe_primario
  8.         FROM    tabla2_impuestos_nacionales
  9.         GROUP BY idfactura) nac
  10.             ON fa.id = nac.idfactura
  11. LEFT JOIN (SELECT idfactura,
  12.                 SUM(importe_primario) importe_primario
  13.         FROM    tabla3_impuestos_provinciales
  14.         GROUP BY idfactura) prov
  15.             ON fa.id = prov.idfactura
  16. GROUP BY fa.id, fa.importe
  17. ORDER BY fa.id DESC

-------------------------------------------
-------------------------------------------
-------------------------------------------

Respondiendo al usuario Libras, te tiro un ejemplo de datos:
tabla1_facturas
id, nro, importe
18097, 272753, 8900
18098, 272754, 11500

tabla2_impuestos_nacionales
id, importe, idfactura
9675, 161.09, 18097
9676, 208.14, 18098

tabla3_impuestos_provinciales
id, importe, idfactura
9124, 1, 18097
9125, 1, 18097
9126, 2, 18098
9127, 7.5, 18098

En ese caso se me duplicaban los valores de la tabla2_impuestos_nacionales quedando asi:
idFactura, nroFactura, importeFactura, sum(importe_nacionales), sum(importe_provinciales), (importeFactura - impuestos)
18097, 272753, 8900, 322.18, 2, 8575.82
18098, 272754, 11500, 416.28, 9.5, 11074.22

Lo correcto hubiera sido:
18097, 272753, 8900, 161.09, 2, 8736.91
18098, 272754, 11500, 208.14, 9.5, 11282.36
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/