Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sumar Registros Con el mismo Id (https://www.clubdelphi.com/foros/showthread.php?t=19987)

jovehe 01-04-2005 20:25:47

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....

maeyanes 01-04-2005 20:30:53

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...

jovehe 04-04-2005 22:59:05

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...

Pablo Carlos 04-04-2005 23:58:21

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;

jovehe 06-04-2005 00:47:41

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.....

gatosoft 06-04-2005 03:18:11

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.

jovehe 07-04-2005 19:33:16

Que tal

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

Espero me sirva.

Saludos....


La franja horaria es GMT +2. Ahora son las 23:51:31.

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