Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-04-2005
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
Question Sumar Registros Con el mismo Id

Que tal amigos del Foro. Tengo un problema grande.

Tengo una tabla con los sig campos: Id_almacen, Id_Concepto, Costo_Total, Tot_Unidades
Lo que necesito hacer es una consulta en donde sume todos los registros que tengan el mismo Id_almacen y Id_Concepto.

Pongo un Ejemplo
Código:
Id_almacen Id_Concepto Costo_Total Tot_Unidades
2 1003 1500 60
3 1003 12000 120
2 1003 2000 50
2 1002 1500 80
3 1003 10000 200
Si observan tengo registros en donde se repiten el Id_almacen y el Id_Concepto, entonces lo que necesito hacer es sumar todos los registro que tengan el mismo Id_almacen y el mismo Id_concepto.
Por ejemplo tenemos el Id _Almacen :2 y el Id_Concepto : 1003
En este caso el costo total seria 3500 y el Tot_Unidades seria 110.

Espero me puedan ayudar con este caso porque ya que soy mas o menos novato en esto y ya me di de topes varias veces.

Les agradezco su atencion y su ayuda.
Saludos....
Responder Con Cita
  #2  
Antiguo 01-04-2005
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
Prueba con esta consulta...
Código SQL [-]
select
  id_almacen,
  id_concepto,
  sum(costo_total) as total,
  sum(tot_unidades) as total_unidades
from
  tabla  /* Aquí el nombre de tu tabla */
where
  id_almacen = :almacen and 
  id_concepto = :concepto
group by
  id_almacen, id_concepto

Saludos...

Última edición por maeyanes fecha: 01-04-2005 a las 20:33:38.
Responder Con Cita
  #3  
Antiguo 04-04-2005
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
que tal

Muchas gracias por tu respuesta y por la rapidez de ella ya pribe la consulta y si funciona a la perfeccion, pero tengo una duda.

Lo que pasa que esos datos los extrae de otra tabla entonces yo quisiera pasarlos a otra tabla nada mas que tengo un pequeño problema al mandar los datos del query a la tabla nada mas me copia un solo registro y eso ocurre me imagino porque como los parametros del query los comparo con los valores que existen en esa tabla. Y la verdad no he podido hacer que copie los datos.

pongo un ejemplo del codigo que estoy utilizando porque la verdad no he podido.
Código:
 
Query1.close;
Query1.ParamByName('almacen').AsInteger:=Table1CIDALMACEN.AsInteger;
Query1.ParamByName('concepto').AsInteger:= able1CIDCONCEPTO.AsInteger;
Query1.Open;
  while not Qry1. eof do
   begin
	table2.append;
	table2CIDALMACEN.AsInteger := qry1IDAlmacen.AsInteger;
	table2CIDCONCEPTO.AsInteger := qry1IDConcepto.AsInteger;
	Table2CostoTotal.ascurrency := qry1total.ascurrency;
	table2TotalUnidades.asinteger := qry1total_unidades.asinteger;
	table2.post;
	qry1.next;
   end;
ojala y me puedan auxiliar ya que soy mas o menos novato en esto y la verdad a veces si me trabo.

Gracias por su ayuda y su atencion.

Saludos...
Responder Con Cita
  #4  
Antiguo 04-04-2005
Avatar de Pablo Carlos
Pablo Carlos Pablo Carlos is offline
Miembro
 
Registrado: jun 2004
Ubicación: Mendoza - Argentina
Posts: 270
Poder: 20
Pablo Carlos Va por buen camino
Hola... no veo que pongas el query antes del while en el comienzo (first)
Saludos
Código Delphi [-]
 
Query1.close;
Query1.ParamByName('almacen').AsInteger:=Table1CIDALMACEN.AsInteger;
Query1.ParamByName('concepto').AsInteger:= able1CIDCONCEPTO.AsInteger;
Query1.Open;
Query1.First; //Aqui agregue esta línea
  while not Qry1. eof do
   begin
  table2.append;
  table2CIDALMACEN.AsInteger := qry1IDAlmacen.AsInteger;
  table2CIDCONCEPTO.AsInteger := qry1IDConcepto.AsInteger;
  Table2CostoTotal.ascurrency := qry1total.ascurrency;
  table2TotalUnidades.asinteger := qry1total_unidades.asinteger;
  table2.post;
  qry1.next;
   end;
__________________
Por qué todas las personas saben exactamente cómo debemos vivir nuestra vida, y nunca tienen idea de cómo deben vivir sus propias vidas.

Última edición por Pablo Carlos fecha: 05-04-2005 a las 00:03:02.
Responder Con Cita
  #5  
Antiguo 06-04-2005
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
Que tal PAblo

Tienes razón no puse en el primero al query se me fue, pero el problema es que si te fijas en mi codigo el sql tiene parametros y estos se igualan a dos campos pero el problema es que debido a esto solo pasa una vez en al tabla.

Yo tengo dos Campos IDALMACEN y IDCONCEPTO los cuales los necesito sumar y mandarlos a otra tabla pero son varios registros. un ejemplo es

Tenemos el IDALMACEN 2 y el IDCONCEPTO: 1003 y en el siguiente registro tenemos el 2 y el 1003; pero despues tenemos el 3 y el 1002 entonces yo tengo que sumar todos los que sean iguales.
El problema es que no se como hacerlo ya hice un pedazo de codigo pero cuando recorre la tabla me repite algunos registros, te pongo mi codigo para que veas como le he hecho.

Código:
 
procedure TForm1.BitBtn1Click(Sender: TObject);
var
var1, var2, var3, var4 : integer;
begin
Table2.Open;
while not table2.Eof do
 begin
  table2.delete;
 end;
var3 := 0;
var4 := 0;
Table2.open;
Table1.open;
Table1.First;
while not Table1.Eof do
 begin
  var1 := Table1CIDALMACEN.AsInteger;
  var2 := Table1CIDCONCEPTO.AsInteger;
if (var1 <> var3) or (var2 <> var4) then
begin
 Query1.close;
 Query1.ParamByName('almacen').AsInteger := Table1CIDALMACEN.AsInteger;
Query1.ParamByName('concepto').AsInteger:= able1CIDCONCEPTO.AsInteger;
 Query1.Open;
 Table2.Append;
 Table2IDALMCONC.AsString	   := IntToStr (var1) + IntToStr (var2);
Table2CIDALMACEN.AsInteger	 := Query1CIDALMACEN.AsInteger;
 Table2CIDCONCEPTO.AsInteger	:= Query1CIDCONCEPTO.AsInteger;
 Table2CTOTALCOSTO.AsCurrency   := Query1total.AsCurrency;
 Table2CTOTALUNIDADES.AsInteger := Query1total_unidades.AsInteger;
 Table2.Post;
 var3 := var1;
  var4 := var2;
	   //Table1.Next;
end;
  // else
 Table1.Next;
 end;
end;
end.
ojala y me pudieran ayudar porque ya me h dado de topes y no he podido, y gracias por tu respuesta tan pronta Pablo.

Saludos.....
Responder Con Cita
  #6  
Antiguo 06-04-2005
Avatar de gatosoft
[gatosoft] gatosoft is offline
Miembro Premium
 
Registrado: may 2003
Ubicación: Bogotá, Colombia
Posts: 833
Poder: 21
gatosoft Va camino a la fama
Talking

Bueno, no se si te entiendo bien, pero pienso que deberias probar la siguiente consulta:

Código:
Insert into tablaFinal(id_almacen, id_concepto, costoTotal, totalUnidades)
  Select id_almacen, id_concepto, sum(costoTotal), sum(totalUnidades)
  from tablaOrigen 
  Group by id_almacen, id_concepto
Con ella no tienes que utilizar tantos componentes y todo saldria en una sola consulta.

Espero que te sirva.
Responder Con Cita
  #7  
Antiguo 07-04-2005
jovehe jovehe is offline
Miembro
 
Registrado: abr 2004
Posts: 51
Poder: 21
jovehe Va por buen camino
Thumbs up

Que tal

Muchas Gracias por la respuesta lo voy a checar que tal queda y les comento.

Espero me sirva.

Saludos....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 22:44:45.


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