Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 15-07-2020
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Cool Duplica al agrupar

Hola Foro:

Necesito agrupar dos tablas por mes, una tiene el total de la factura y otra el detalle.

El resultado que se necesita obtener, es la suma de los ID_conceptos ( 101 + 102 ) agrupados por mes.(*)

MES, Total, Cantidad
5 ,1911.20, 140 (10+25+20+50+10+25)

Más abajo encontrarán los create e incert si quieren cargar las tablas para probar.

Estoy usando Firebird 2.5

Desde ya gracias por su atención.

Las tablas son estas:

tabla VentasABC
ID_Venta MES , Total
1 , 5 , 456.10
2 , 5 , 999.00
3 , 5 , 456.00

Tabla DetalleABC
ID_Venta, ID_Concepto, Cantidad
1 , 101 , 10 *
1 , 102 , 25 *
1 , 103 , 30
2 , 101 , 20 *
2 , 102 , 50 *
2 , 103 , 90
3 , 101 , 10 *
3 , 102 , 25 *
3 , 103 , 30

Estoy haciendo esto....

Código SQL [-]
Select v.Mes, sum(v.Total) as Total, sum(d.cantidad) as Cantidad
from VentasABC v
join DetalleABC d on d.ID_Venta=v.ID_Venta
Where d.ID_Concepto in (101,102)
group by v.mes

... Pero me duplica el campo v.Total


Acá estan los create y los insert.

Código SQL [-]
Create table VentasABC (
ID_Venta Integer,
MES Integer,
Total Numeric (15,2) );

Insert into VentasABC Values (1, 5, 456.10);
Insert into VentasABC Values (2, 5, 999.00);
Insert into VentasABC Values (3, 5, 456.10);

Create table DetalleABC (
ID_Venta Integer,
ID_Concepto Integer,
Cantidad Numeric (15,2));

Insert into DetalleABC values (1 , 101,10);
Insert into DetalleABC values (1 , 102,25);
Insert into DetalleABC values (1 , 103,30);
Insert into DetalleABC values (2 , 101,20);
Insert into DetalleABC values (2 , 102,50);
Insert into DetalleABC values (2 , 103,90);
Insert into DetalleABC values (3 , 101,10);
Insert into DetalleABC values (3 , 102,25);
Insert into DetalleABC values (3 , 103,30);
Nota: Sumar distintos ID_Conceptos puede parecer raro (sumar papas + cebollas) pero en este caso son distintos ID_Conceptos que responden a un mismo tipo de articulo.
Responder Con Cita
  #2  
Antiguo 15-07-2020
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Pues acabo de hacer una prueba y arroja esto:

Código SQL [-]
MES  TOTAL  CANTIDAD
5  3822.4  140

No duplica nada...cree las tablas e inserte los registros que enviaste y ejecute el query...y lo hace bien, muestra 1 sola linea con los datos q puse arriba.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #3  
Antiguo 15-07-2020
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 21
Carmelo Cash Va por buen camino
Hola. Si, Duplica

Si, Duplica el Total

Fijate que el total te da 3822.4

y 456.10 + 999.00 + 456.10 = 1911.20

Eso es lo que está mal.
Responder Con Cita
  #4  
Antiguo 15-07-2020
aposi aposi is offline
Miembro
 
Registrado: dic 2006
Posts: 146
Poder: 18
aposi Va por buen camino
Hola, prueba con un left join


Código SQL [-]
Select v.Mes, sum(v.Total) as Total, sum(d.cantidad) as Cantidad
from VentasABC v 
left join DetalleABC d on d.ID_Venta=v.ID_Venta 
Where d.ID_Concepto in (101,102) 
group by v.mes
Responder Con Cita
  #5  
Antiguo 15-07-2020
bucanero bucanero is offline
Miembro
 
Registrado: nov 2013
Ubicación: Almería, España
Posts: 208
Poder: 11
bucanero Va camino a la fama
prueba con esta consulta:

Código:
SELECT v.Mes, sum(v.Total) AS Total, sum(d.cantidad) AS Cantidad
  FROM VentasABC v
       LEFT JOIN (SELECT ID_Venta, sum(cantidad) AS cantidad
                    FROM DetalleABC
                   WHERE ID_Concepto IN (101, 102)) d
          ON d.ID_Venta = v.ID_Venta
GROUP BY v.mes
Responder Con Cita
  #6  
Antiguo 15-07-2020
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por bucanero Ver Mensaje
prueba con esta consulta:

Código:
SELECT v.Mes, sum(v.Total) AS Total, sum(d.cantidad) AS Cantidad
  FROM VentasABC v
       LEFT JOIN (SELECT ID_Venta, sum(cantidad) AS cantidad
                    FROM DetalleABC
                   WHERE ID_Concepto IN (101, 102)) d
          ON d.ID_Venta = v.ID_Venta
GROUP BY v.mes
Aplicando esta consulta de BUCANERO si se obtiene lo q buscas, solo que hizo falta algo en el código:
Código SQL [-]
Select v.Mes,
       sum(v.Total) as Total,
       sum(d.cantidad) as Cantidad
from VentasABC v
  left join (select id_venta,
                    sum(cantidad) as cantidad
             from DetalleABC
             where id_concepto in (101,102)
             group by id_venta) d
  on d.ID_Venta=v.ID_Venta
group by v.mes

lo q esta en rojo es lo que hizo falta
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
  #7  
Antiguo 15-07-2020
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 599
Poder: 21
mRoman Va por buen camino
Cita:
Empezado por Carmelo Cash Ver Mensaje
Si, Duplica el Total

Fijate que el total te da 3822.4

y 456.10 + 999.00 + 456.10 = 1911.20

Eso es lo que está mal.
Ah, lo SUMA 2 VECES...lo entendí mal.
__________________
Miguel Román

Afectuoso saludo desde tierras mexicanas....un aguachile?, con unas "cetaseas" bien "muertas"?, VENTE PUES !!
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Al Editar un Registro me lo duplica webmasterplc Conexión con bases de datos 9 13-01-2017 00:23:17
Se Me Duplica La Suma jooooseph Firebird e Interbase 2 28-11-2013 16:04:58
Update duplica registro FerCastro SQL 22 28-10-2008 19:21:05
Duplica informacion en archivo txt muppett Varios 5 22-02-2008 13:08:28
INSERT INTO duplica registros. Duc SQL 3 02-08-2004 16:46:09


La franja horaria es GMT +2. Ahora son las 15:40:10.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi