Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Error con Sql Group By (https://www.clubdelphi.com/foros/showthread.php?t=76399)

sabueso1010 28-10-2011 23:01:52

Error con Sql Group By
 
Hola foro, tengo el siguiente codigo y me marca el error que muestro al final de este tema

Código Delphi [-]
filtro:='SELECT codigo, fecharec, facturafolio, fecha_vence, cobrarcodigo, cobrarnombre, moneda, sum(total), sum(abonos), sum(saldo), total, abonos, saldo, estado from '+#34+qtabla+#34+' where estado = '+quotedstr('FACTURADO');

if rg3.itemindex=1 then filtro:=filtro+' and cobrarcodigo  = '+#34+edit1.text+#34;
if rg3.itemindex=2 then filtro:=filtro+' and cobrarcodigo  = '+#34+edit1.text+#34+' and moneda = "PESOS" ';
if rg3.itemindex=3 then filtro:=filtro+' and cobrarcodigo  = '+#34+edit1.text+#34+' and moneda = "DOLARES" ';
filtro:=filtro+' Group by facturafolio ';

with data.qfacturas do begin
  close;
  SQL.Clear;
  SQL.Add(filtro);
  open;
end;

Error mostrado en tiempo de ejecucion
class edbenginneerror with message " when GROUP BY exists,
every simple field in projectors must be in GROUP BY."

Casimiro Notevi 28-10-2011 23:08:21

Pon un punto de ruptura en "Open" y mira qué valor tiene la variable "filtro".
Pegas ese texto en el ibexpert o en el manejador de bases de datoa que uses y ya nos cuentas.
Porque no podemos ayudarte demasiado si no sabemos qué valores tienen esos edits.

oscarac 28-10-2011 23:13:17

lo que el mensaje quiere decirte es que cuando usas la clausula Group debes agrupar por todos los campos que utilizas en el select

Ejemplo

Código SQL [-]
 
 
Select Campo1, Campo2, Campo3, Sum(campo4) From Tabla Group by Campo1  --> ERROR
Select Campo1, Campo2, Campo3, Sum(campo4) From Tabla Group by Campo1, Campo2, Campo3  --> Correcto

asi como te dice casimiro primero verifica que contiene la cadena

sabueso1010 28-10-2011 23:41:12

creo que ando perdido entonces
 
creo que lo que pasa es que no se que funcion de sql usar , explico mejor lo que quiero hacer haber que consejo me dan de como hacerlo :)
. Tengo 1 tabla con ventas o remisiones que despues se facturan en 1 factura puede incluir varias ventas o remisiones. ejemplo de la tabla

Código Delphi [-]
Campos
Folio_venta  , fecha_venta, Cliente,     Total, Factura
----------------------------------------------------
  1                01/01/01          1         10           1150  
  2                01/01/01          1         50           1180
  3                01/01/01          1         30           1150
  4                01/01/01          1         10           1151  
  5                01/01/01          1         80           1180
  6                01/01/01          1         65           1150
  7                01/01/01          1         43           1151  
  8                01/01/01          1         21           1180
  9                01/01/01          1         74           1151


lo que necesito es que en el dbgrid o mi sql filtre me agrupe por factura es decir de la factura 1150 y el total de ventas y luego la 1151 igual , luego la 1180, etc etc
como puedo hacer eso con sql, utilizo BDE como motor de datos, saludos.

oscarac 28-10-2011 23:45:58

primero pides manzanas y luego tomates....

seria mas o menos asi

Código SQL [-]
 
Select Factura, Sum (total) As Total From tabla Group by Factura

sabueso1010 29-10-2011 00:02:55

jaja tienes razon ascarac
 
bueno pido una disculpa como no sabia ni tenia idea de como hacer lo que quiero hacer creo que me explique mal desde el principio, ups, pero aun asi no me sirve aun que funciona la solucion de ascarac por que solo me da asi 2 campos en la dbgrid o view, lo que ocupo es presisamente esa suma pero en conjunto con todos los demas datos de la tabla, osea que me muestre solo 1 registro por factura aun que existan varias ventas que esten incluidas en 1 factura, osea existen ejemplo 5 registros de ventas que pertenecen a una factura, en la tabla existen 5 registros pero solo quiero ver uno por cada factura, alguien me puede apoyar ?

saludos.

oscarac 29-10-2011 00:05:50

utilizando el ejemplo (DATOS) que has colocado...
podrias mostrar lo que necesitas ?

sabueso1010 29-10-2011 00:26:57

gracias oscarar
 
mira pondre ejemplo de datos anterior como esta y como lo ocuparia
asi esta la tabla actualmente y eso visualizo en el dbgrid

Código Delphi [-]
Campos
Folio_venta  , fecha_venta, Cliente,     Total, Factura
----------------------------------------------------
  1                01/01/01          1         10           1150  
  2                01/01/01          1         50           1180
  3                01/01/01          1         30           1150
  4                01/01/01          1         10           1151  
  5                01/01/01          1         80           1180
  6                01/01/01          1         65           1150
  7                01/01/01          1         43           1151  
  8                01/01/01          1         21           1180
  9                01/01/01          1         74           1151
como veras existen 3 registros de venta con direfentes folios_venta pero con el mismo numero de factura
es decir que esas 3 ventas se facturaron en 1 sola factura unica, lo que ocupo hacer es que por cada factura acumule los folios de venta ejemplo claro existe la factura 1150 en 3 de los folios de venta entonces quiero que aparezca algo asi con 1 solo registro por factura

Campos aqui ya el campo folio de venta no lo ocupo

Código Delphi [-]
fecha_venta, Cliente,     Total, Factura
----------------------------------------------------
 01/01/01          1         105         1150  
 01/01/01          1         127         1151  
 01/01/01          1         151         1180

saludos y espero explicarme !!!! :)

oscarac 29-10-2011 00:33:27

Entonces es asi
mira que dificil

Código SQL [-]
Select fecha, Cliente, Factura, Sum (total) As Total From tabla Group by fecha, Cliente, Factura

orioncomputer 29-10-2011 00:36:24

Saludos,

Si Aplicas o Adaptas a tu consulta el Ejemplo que te puso oscarac
Código SQL [-]
Select Factura, Sum (total) As Total From tabla Group by Factura
Este quedaria Así:
Código SQL [-]
Select fecha_venta, Cliente, Sum(Total) AS Total, Factura
From tabla Group by fecha_venta, Cliente, Factura

Cualquier Duda, no dudes en preguntar.....:):D


La franja horaria es GMT +2. Ahora son las 00:22:29.

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