Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   estadistica de ventas (https://www.clubdelphi.com/foros/showthread.php?t=81904)

DOS 02-01-2013 00:18:19

estadistica de ventas
 
Primero que nada, Feliz año para todos!!!
Quiero calcular las estadisticas de ventas por varios parametros como, los mas vendidos, o los los vendidos en los ultimos 10 dias o productos sin salida, etc. para la seleccion utilizaria un combobox.
Las tablas serian, factura:
Cod_fact
Cod_cliente
Fecha

detalle de factura:
Cod_prodser
descripcion
importe
cantidad

Utilizando Delphi7 y SQL, haria algo asi.

Código Delphi [-]
procedure TForm13.Button1Click(Sender: TObject);
begin
Query1.Close;
  Query1.SQL.Text:= 'SELECT * FROM detfactura.DB ';
  Query1.SQL.Add('inner join factura.DB on Cod_fact = Cod_prodser');
if combobox2.Text = 'Más vendidos' then
begin
  Query1.SQL.Add('WHERE  )
  Query1.SQL.ADD(' ORDER BY Cantidad ASC');
  Query1.Active:=true;
end;
Query1.Open;
end;

En la consulta del WHERE no se que hacer, deberia seleccionar el codigo del producto y que sume la cantidad? pero lo tiene que hacer en todas las facturas, no?
no se como realizarlo, creo que estoy medio encarado pero no tengo tanto conocimiento en SQL. Calculando la primera creo que podria sacar las demas consultas.
Agradesco cualquier ayuda.

Caral 02-01-2013 02:49:53

Hola
Me parece que tienes que hacer una distincion de los productos para que no se te dupliquen en la factura.
Ademas tendras que hacer la suma de la cantidad por medio de un group by ya que necesitaras establecer el grupo.
Algo asi:
Código Delphi [-]
procedure TForm13.Button1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text:= 'SELECT DISTINCT Cod_prodser,descripcion, importe, Sum(Cantidad) as Cantidad_Total  FROM detfactura.DB ' +
                    ' inner join factura.DB on Cod_fact = Cod_prodser ';
if combobox2.Text = 'Más vendidos' then
begin
  Query1.SQL.Add( 'WHERE factura.Fecha >= :Fecha1 and factura.Fecha <= :Fecha2' +
                    ' Group by Cod_prodser,descripcion, importe '+
                    ' ORDER BY detfactura.Cantidad ASC ');
  Query1.Params[0].Value:= TuDato1;
  Query1.Params[1].Value:= TuDato2;
  Query1.Active:=true;
end;
Query1.Close;
end;
A ver si te sirve de ejemplo o por lo menos para pasar el rato.:D
Saludos

cloayza 02-01-2013 13:56:12

Cita:

Empezado por DOS (Mensaje 452752)
pero no tengo tanto conocimiento en SQL....

Lo que te puedo aconsejar en este caso es adquiere mas conocimientos de SQL, así tendrás las herramientas necesarias para solucionar tus problemas...

http://www.w3schools.com/sql/default.asp
http://es.wikipedia.org/wiki/SQL

Una variante al código de Caral podría ser:

Código Delphi [-]
procedure TForm13.Button1Click(Sender: TObject);
begin
  Query1.Close;
  Query1.SQL.Text:= 'SELECT DISTINCT Cod_prodser,descripcion, importe, Sum(Cantidad) as Cantidad_Total  FROM detfactura.DB ' +
                    ' inner join factura.DB on Cod_fact = Cod_prodser ';
if combobox2.Text = 'Más vendidos' then
begin
  Query1.SQL.Add( 'WHERE factura.Fecha >= :Fecha1 and factura.Fecha <= :Fecha2' +
                    ' Group by Cod_prodser,descripcion, importe '+
                    'HAVING SUM(Cantidad)>50'+  //Aquí le estas indicando que te traiga todos los productos cuya cantida  (Suma) sea mayor a 50, este valor lo puedes parametrizar al igual qu 
                    ' ORDER BY detfactura.Cantidad ASC ');
  
  Query1.Params[0].Value:= TuDato1;
  Query1.Params[1].Value:= TuDato2;
  Query1.Active:=true;
end;
Query1.Close;
end;

Saludos cordiales

DOS 02-01-2013 16:52:51

Muchas gracias a ambos, hoy cuando llegue a casa veo si lo puedo implementar.


La franja horaria es GMT +2. Ahora son las 07:00:48.

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