Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Se puede Combinar Top, SUM, GRoup (https://www.clubdelphi.com/foros/showthread.php?t=38539)

maravert 18-12-2006 13:43:39

Se puede Combinar Top, SUM, GRoup
 
Hola compañeros:

Espero puedas darme una manita:
Manejo Delphi 7 y Tablas Paradox

Necesito obtener los 10 Mejores Clientes de la empresa durante un periodo, tengo el siguiente codigo pero me da un error "When GROUP BY EXIST, every simple field in projectors must be in Group BY"

Mi tabla Ventas, tiene los siguientes campos: Id_Cliente, Fecha, Subtotal, Iva,


Código SQL [-]
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select Sum (Ventas.Subtotal) as VentasTop, Ventas.Id_Cliente, Ventas.Fecha');
Query1.SQL.Add('FROM Ventas INNER JOIN Clientes ON Ventas.Id_Cliente = Clientes.Clave');
Query1.SQL.Add('where fecha >= :fechav AND fecha <= :fechah');
Query1.SQL.Add('GROUP BY Ventas.Id_Cliente');
Query1.ParamByNAme('fechav').AsDate := Fecha1;
Query1.ParamByNAme('fechah').AsDate := Fecha2;
Query1.Open;;







Ademàs queno se donde colocar el TOP 10.

Espero alguien me de una manita.

Gracias a todos

luisgutierrezb 19-12-2006 02:00:04

te falta agregar "Ventas.Fecha" a la clausula group by, sin embargo este campo a mi juicio debe quedar fuera por una simple razon, quieres obtener los 10 mejores clientes en un tiempo determinado, digamos 1 mes, 1 semana o lo que sea, pero si usas el campo fecha, tienes que agregarlo a la clausula group by por lo tanto solo te sumaria las ventas de esa fecha, las de 1 dia despues serian otra suma...

fjcg02 23-12-2006 01:08:03

Prueba esto, tal cual

Código SQL [-]
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select Clientes.Nombre, Sum (Ventas.Subtotal) as VentasTop');
Query1.SQL.Add('FROM Ventas INNER JOIN Clientes ON Ventas.Id_Cliente = Clientes.Clave');
Query1.SQL.Add('where fecha >= :fechav AND fecha <= :fechah');
Query1.SQL.Add('GROUP BY Clientes.Nombre');
Query1.SQL.Add('ORDER BY VentasTop DESC');
Query1.ParamByNAme('fechav').AsDate := Fecha1;
Query1.ParamByNAme('fechah').AsDate := Fecha2;
Query1.Open;;

Pasa del top 10, te saldrán ordenados de mayor a menor en la suma de ventas. Para qué vas a quedarte con 10 si puedes ver todos. Si no funciona prueba con 'ORDER BY 2 DESC' ( ordeno descendentemente por el 2º campo). En el ejemplo que te pondo estoy suponiendo que en la tabla clientes tienes un campo "nombre", porque si vas a visualizar el idcliente no tiene sentido que incluyas dos tablas.

Suerte.
Un saludo


La franja horaria es GMT +2. Ahora son las 08:03:01.

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