Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 11-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
ayuda problema con group by

Código Delphi [-]
   if(chkFecha.Checked) then
     begin
               dmDatos.cdsCliente.Active := false;
                with dmDatos.qryListados do begin
                if Active then Close;
                SQL.Clear;
                SQL.Add('SELECT f.caja,f.numero,f.fecha,f.hora,f.estatus,f.total-f.iva AS subtotal,f.iva,f.total,f.cliente,f.clave,sum(f.total) AS gtotal FROM ventas f WHERE f.fecha = :fecha GROUP BY f.caja,f.numero,f.fecha,f.hora,f.estatus,f.iva,f.total,f.cliente,f.clave');
                parambyname('fecha').AsDate := FechaBusq.date;
                open;
                end;

            with dmDatos.cdsCliente do begin
            Active := true;
            txtTotalventa.text := floattostr(FieldByName('gtotal').AsFloat);
            txtRegistros.text := inttostr(dmDatos.cdsCliente.RecordCount);
            FieldByName('caja').DisplayLabel := 'Caja';
            FieldByName('caja').DisplayWidth := 4;
            FieldByName('numero').DisplayLabel := 'Remisión';
            FieldByName('numero').DisplayWidth := 8;
            FieldByName('fecha').DisplayLabel := 'Fecha';
            FieldByName('fecha').DisplayWidth := 9;
            FieldByName('hora').DisplayLabel := 'Hora';
            FieldByName('hora').DisplayWidth := 11;
            FieldByName('estatus').DisplayLabel := 'Estatus';
            FieldByName('estatus').DisplayWidth := 7;
            FieldByName('subtotal').DisplayLabel := 'Subtotal';
            FieldByName('subtotal').DisplayWidth := 10;
           // (FieldByName('subtotal') as TNumericField).DisplayFormat := '#,##0.00';
            FieldByName('iva').DisplayLabel := 'IGV';
            FieldByName('iva').DisplayWidth := 10;
           // (FieldByName('iva') as TNumericField).DisplayFormat := '#,##0.00';
            FieldByName('total').DisplayLabel := 'Total';
            FieldByName('total').DisplayWidth := 10;
           // (FieldByName('total') as TNumericField).DisplayFormat := '#,##0.00';
            FieldByName('cliente').Visible := false;
          //  FieldByName('usuario').Visible := false;
            FieldByName('clave').Visible := False;
            FieldByName('gtotal').Visible := False;
           end;
    end
hola a todos este codigo utilizo para filtrar registros de una base de datos.. pero la parte sum(total) no me suma solo me devuelve el resultado del primer registro

Código Delphi [-]
SQL.Add('SELECT sum(f.total) AS gtotal FROM ventas f WHERE f.fecha = :fecha')

ese codigo filtra por fecha y me devuelve bien la suma de todos los registros de tal fecha

jose 2.5 05/05/2011
maria 2.5 05/05/2011
carla 1.0 06/05/2011

si lo filtro por fecha 5 solo sale en un text el total de gtotal que seria 5

todo bien ahi ahora como veran no solo necesito la suma del total en un edit si no que tmb me muestre el filtrado asi

jose 2.5 05/05/2011
maria 2.5 05/05/2011

ahora implemento el codigo asi

Código Delphi [-]
QL.Add('SELECT f.caja,f.numero,f.fecha,f.hora,f.estatus,f.total-f.iva AS subtotal,f.iva,f.total,f.cliente,f.clave,sum(f.total) AS gtotal FROM ventas f WHERE f.fecha = :fecha')

y como aumente todos los campos que se necesita para que se muestre ahora aparte de en un edit el total tambien en un GRID
me sale que necesito un group by clause

Código Delphi [-]
SQL.Add('SELECT f.caja,f.numero,f.fecha,f.hora,f.estatus,f.total-f.iva AS subtotal,f.iva,f.total,f.cliente,f.clave,sum(f.total) AS gtotal FROM ventas f WHERE f.fecha = :fecha GROUP BY f.caja,f.numero,f.fecha,f.hora,f.estatus,f.iva,f.total,f.cliente,f.clave');

lo implemento asi y me filtra bien me muestra los resultados si filtro por fecha 05/05/211 esto

jose 2.5 05/05/2011
maria 2.5 05/05/2011


pero en el edit me sale solo 2.5


ese es mi problema que ahora ya no me suma el total, creo que estoy haciendo algo mal con el group by

necesito que me ayuden porfavor muchas gracias de antemano
Responder Con Cita
  #2  
Antiguo 11-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
No entiendo bien el problema, pero si fuera el group by daria error, no resultados equivocados.
Me parece.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #3  
Antiguo 11-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
quisiera saber porque no funciona el sum(total) porque no suma todos los registros.. que estare haciendo mal ?
Responder Con Cita
  #4  
Antiguo 11-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
En base a mi poca experiencia:
Aveces dependiendo de la base de datos, para que la suma sea la que uno requiere se necesita definir algunos parametros adicionales como podrian ser, distinct, max, min, etc.
Los registros son secuenciales, eso quiere decir que ocupan toda la linea, si se quiere hacer una suma sobre todo total, se necesita hacer una distincion para que se defina correctamente el dato.
No creo que te pueda ayudar mucho, pero por lo menos ponemos la duda en la primera fila.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 11-05-2011
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 19
identsoft Va por buen camino
Cuando haces un Sum(algo), este Sum te lo hace de los campos que le digas en group by. Si especificas muchos campos en group by, la instruccion Sql no da error, pero no saca el resultado que esperamos.
En concreto:
1º: si la el Where lleva el campo fecha, no se porque el group by lleva el campo fecha.
2ª Si quieres agrupar el valor de un campo(total) en función del cliente, en el group by debería estar solo el cliente (porque la fecha ya la seleccionas en la seccion del where).
3º Si quieres agrupar por Horas y ordenado por cliente, deberias utilizar el group by horas y order by cliente
En fín, he intentado explicar un poco como funciona el group by, no intento solucionar tu problema, porque no se lo que quieres.
Un saludo
jesús
Responder Con Cita
  #6  
Antiguo 11-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
no puedo quitarle ningun campo al group by porque da error.. en el group no se pone todos los campos que estan en el select y no son afectados ?.. bueno porque si le quito por ejemplo fecha da error de invalid columm reference

uso como base de datos firebird
Responder Con Cita
  #7  
Antiguo 11-05-2011
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 19
identsoft Va por buen camino
No comprendo como en la select tienes ... total-iva, iva, total y sum(total).
¿No será sum(total-iva), Sum(iva) y Sum(total) ?
Si no es así, explica que quieres obtener
Responder Con Cita
  #8  
Antiguo 12-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
el codigo que tengo arriba quiero que funcione el sum(total) ya que si tengo

nombre total fecha
------ ---- -----
maria 2.5 05/05/2011
jose 2.0 05/05/2011

este me devuelve 2.5 y no 4.5
quiero obtener la suma,el total de lo que se muestra en el campo total
Responder Con Cita
  #9  
Antiguo 12-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Hay campos coincidentes, en tu caso dos, por lo menos eso es lo que muestras.
Si no se define que o cuales campos sumar como puede hacer la operacion el sistema ?.
Hay que definir que es lo que se quiere y usar los elementos SQL que sean necesarios.
Este es un ejemplo de ese uso, no se si sera tu caso pero es la idea.
Código SQL [-]
   ' SELECT DISTINCT f.caja, Last(f.numero) as numero, f.fecha, '+
   ' f.hora, f.estatus, (f.total - f.iva) AS subtotal,'+
   ' f.iva,f. total, f.cliente, f.clave, sum(f.total) AS gtotal '+
   ' FROM ventas f WHERE f.fecha = :fecha '+
   ' GROUP BY f.caja, f.fecha, f.hora, f.estatus, f.iva, '+
   ' f.total, f.cliente, f.clave '+
   ' ORDER BY Last(f.numero) ';
Como ves se indica la definicion de un campo, en este caso f.caja y ademas se define que sea el ultimo dato de f.numero, osea, busca una linea de la tabla.
Espero que te de alguna idea.
Saludos
__________________
Siempre Novato
Responder Con Cita
  #10  
Antiguo 12-05-2011
identsoft identsoft is offline
Miembro
 
Registrado: abr 2006
Posts: 282
Poder: 19
identsoft Va por buen camino
Cita:
Empezado por Rofocale Ver Mensaje
el codigo que tengo arriba quiero que funcione el sum(total) ya que si tengo

nombre total fecha
------ ---- -----
maria 2.5 05/05/2011
jose 2.0 05/05/2011

este me devuelve 2.5 y no 4.5
quiero obtener la suma,el total de lo que se muestra en el campo total
Si solo quieres obtener la suma del campo 'total' : Select Sum(total) ... where fecha =: FECHA
pero este select es independiente del select anterior.
En el select anterior le estas diciendo (entre otras cosas) que te sume el campo total en función:
1º te le agrupe por caja
2º dentro de caja te lo agrupe por fecha
3º dentro de fecha te lo agrupe por hora
... etc
Al final el sumatorio es el sumatorio de un único registro, lo cual creo que no es lo que buscas.
Responder Con Cita
  #11  
Antiguo 12-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
exacto.. como podria hacer para resolverlo ? 8-) alguna idea
Responder Con Cita
  #12  
Antiguo 12-05-2011
Rofocale Rofocale is offline
Miembro
 
Registrado: mar 2010
Posts: 182
Poder: 15
Rofocale Va por buen camino
como puedo hacer 2 selects a la ves para asi obtener tambien el sum(f.total) de manera correcta ?
Responder Con Cita
  #13  
Antiguo 12-05-2011
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Un solo parametro, dos select:
Código SQL [-]
   ' SELECT f.caja, f.numero, f.fecha, '+
   ' f.hora, f.estatus, (f.total - f.iva) AS subtotal,'+
   ' f.iva,f. total, f.cliente, f.clave '+
   ' (SELECT sum(f.total) AS gtotal FROM ventas f WHERE f.fecha = :fecha)'+
   ' FROM ventas f WHERE f.fecha = :fecha '+
   ' GROUP BY f.caja, f.numero, f.fecha, f.hora, f.estatus, f.iva, '+
   ' f.total, f.cliente, f.clave '+
Saludos
__________________
Siempre Novato
Responder Con Cita
Respuesta



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

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Ayuda group by x fecha¡¡¡ Poke SQL 13 17-04-2010 14:43:58
Ayuda con group by nikotina SQL 5 23-06-2008 14:32:43
Problema con Group by david_uh Firebird e Interbase 2 13-04-2008 20:37:08
Problema con group by apicito SQL 7 23-05-2006 08:32:25
problema con group by raudelink SQL 2 18-10-2004 21:19:05


La franja horaria es GMT +2. Ahora son las 03:27:22.


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