Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Consulta con LEFT JOIN, SUM y GROUP BY se me triplican datos

Estas en el tema de Consulta con LEFT JOIN, SUM y GROUP BY se me triplican datos en el foro de SQL Server en Foros del Web. Buenos días!! Tengo las siguientes tablas: tabla1_facturas id, nro, importe tabla2_impuestos_nacionales id, importe, idfactura tabla3_impuestos_provinciales id, importe, idfactura Mi consulta deberá mostrar una línea por ...
  #1 (permalink)  
Antiguo 05/10/2012, 06:48
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
Puntos: 7
Pregunta Consulta con LEFT JOIN, SUM y GROUP BY se me triplican datos

Buenos días!!

Tengo las siguientes tablas:

tabla1_facturas
id, nro, importe

tabla2_impuestos_nacionales
id, importe, idfactura

tabla3_impuestos_provinciales
id, importe, idfactura


Mi consulta deberá mostrar una línea por cada factura de 6 columnas con la siguiente información:
idFactura, nroFactura, importeFactura, sum(importe_nacionales), sum(importe_provinciales), (importeFactura - impuestos)

Lo que hago es lo siguiente:

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

Se me complica cuando una factura tiene por ejemplo 3 impuestos nacionales,
y solo 1 provincial, ya que este último se me triplica. :(

¿Alguna sugerencia?

Gracias!
__________________
Blümchen... einfach die rave Prinzessin
http://www.dmassive.com.ar/
  #2 (permalink)  
Antiguo 05/10/2012, 08:02
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: Consulta con LEFT JOIN, SUM y GROUP BY se me triplican datos

un ejemplo de tus datos ayudaria un poco :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 05/10/2012, 15:33
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Respuesta: Consulta con LEFT JOIN, SUM y GROUP BY se me triplican datos

De lo que yo entiendo concluyo que la consulta debe ser asi:
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
  19. ORDER BY fa.id DESC
Como "regla del pulgar"- las columnas que aparecen en el Group By de tabla1_facturas deben aparecer tambien (en este caso) en los operdores On (del Left Join), para que cada combinacion de las columnas coincida correctamente.

Que es la clave primaria de tabla1_facturas?
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog
  #4 (permalink)  
Antiguo 09/10/2012, 07:20
Avatar de dmassive  
Fecha de Ingreso: febrero-2002
Ubicación: Paraná - Entre Ríos - Argentina
Mensajes: 279
Antigüedad: 22 años, 2 meses
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/

Etiquetas: group, join, left, select, sum, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:05.