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: 22
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: 638
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: 22
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: 149
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: 638
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
  #7  
Antiguo 15-07-2020
Avatar de mRoman
mRoman mRoman is offline
Miembro
 
Registrado: nov 2003
Posts: 638
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
  #8  
Antiguo 17-07-2020
Avatar de Carmelo Cash
Carmelo Cash Carmelo Cash is offline
Miembro
 
Registrado: jul 2003
Ubicación: Buenos Aires
Posts: 261
Poder: 22
Carmelo Cash Va por buen camino
Listo

Gracias a todos, al final lo dejé asi.

Como siempre, los participantes de este foro son geniales.

Gracias mRoman, Bucanero y posi.

Saludos

Código SQL [-]
Select v.Mes, sum(v.Total) as Total, 
sum( (select sum(d.cantidad) 
      from  detalleABC d 
      where  d.ID_Venta=v.ID_Venta
      and d.ID_Concepto in (101,102)))
from VentasABC v
group by v.mes
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 01:23:17
Se Me Duplica La Suma jooooseph Firebird e Interbase 2 28-11-2013 17:04:58
Update duplica registro FerCastro SQL 22 28-10-2008 20:21:05
Duplica informacion en archivo txt muppett Varios 5 22-02-2008 14:08:28
INSERT INTO duplica registros. Duc SQL 3 02-08-2004 17:46:09


La franja horaria es GMT +2. Ahora son las 01:21: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