Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problema con Consulta (https://www.clubdelphi.com/foros/showthread.php?t=39688)

Tolón 26-01-2007 23:26:14

Problema con Consulta
 
Antes que nada Quiero Presentarme ante todos los miembros del Club.
Mi Nombre es Othón Casasa Richardi, y soy originario de Veracruz, Mexico.
e leido varios temas de este foro y me han ayudado a solucionar algunos probelmas relacionados con desarrollar en delphi.

Tengo un problema actualmente, parece que es sencillo pero por alguna razón no me sale :(

Tengo un query que no me suma el total de lo realizado en X determinada semana de trabajo

el código del query es el siguiente:
Código SQL [-]
SELECT SUM(semanan.total), Semanan.Sem, Semanan.id, Semanan.Cve_par, Semanan.Ppto, Semanan.Concepto, Semanan.Unidad,
 Semanan.Cantidad, Semanan.Precio, Semanan.Total, Semanan.Proveedor, Semanan.Avanze, Semanan.Creado, Semanan.Actualizado, 
Semanan.Subtotal, Semanan.documento, Semanan.Cve_proy, Semanan.Npartida, Semanan.Pagado
 
FROM "currentProject.db" Currentproject
INNER JOIN "SemanaN.DB" Semanan
ON (Semanan.Cve_proy = Currentproject.Cve_proy) 
 
where (sem =:Nsemana)
 
group by semanan.sem,Semanan.id, Semanan.Cve_par, Semanan.Ppto, Semanan.Concepto, Semanan.Unidad, Semanan.Cantidad, 
Semanan.Precio, Semanan.Total, Semanan.Proveedor, Semanan.Avanze, Semanan.Creado, Semanan.Actualizado, Semanan.Subtotal, 
Semanan.documento, Semanan.Cve_proy, Semanan.Npartida, Semanan.Pagado
Cabe mencionar que en el campo de la suma, me pone el total de cada renglón y yo lo que quiero en ese campo es la suma de los totales de todos los renglones.

Muchas Gracias de antemano y me despido enviándoles un cordial saludos desde Veracruz.
[/size]

basti 27-01-2007 04:15:44

El problema está en todos esos Group By que tienes. Para ver la suma total sólo te haría falta lo siguiente:
Código SQL [-]
SELECT SUM(semanan.total) from "currentProjet.db" CurrentProject
INNER JOIN "SemanaN.DB" Semanan
ON (Semanan.Cve_proy = Currentproject.Cve_proy) 
where (sem =:Nsemana)

Todos los campos que pongas en el group by irán añadiendo grupos, por ejemplo, si pones semanan.sem en el group by, lo que te hará la consulta es mostrarte las sumas de cada semana, no la suma total de todo.

Tolón 29-01-2007 17:44:56

Hola Basti,

Gracias por tu respuesta, lo puse como lo propones pero obtengo un mensaje de error del DBE Engine donde se especifica que en caso de existir campos añadidos en el query (en este caso es el campo suma) debe existir el group by.
Si pongo solamente en el group by semanan.sem me pone el error que si existe un group by cada campo simple debe estar en el group by. por esto es la razón que tengo todos esos campos en el group by.

Gracias y saludos

Ivanzinho 29-01-2007 18:26:12

El problema que tienes es que no se puede querer todo en una consulta, me explico.

El group by lo que hace es agrupar los registros, en los que coincidan todos los campos que se indican en el group by, en un solo registro. Lo que veo que haces aquí es agrupar por precio, proveedor, etc..., campos que son distintos dentro de los registros de la misma semana, por lo que si quieres el total de la semana entonces no los necesitas y por tanto la consulta que te indica basti sin group by y filtrando por semana es correcta (lo que tienes que hacer es sacar solo el total, filtrar por semana y eliminar el group by).

basti 29-01-2007 19:52:54

Como bien dice Ivanzinho, no debes querer una consulta que te haga todo, en este caso hay una solución:
Código SQL [-]
SELECT semanan.sem,  campo1, campo2... 
 (select SUM(semanan.total) from semanan) as sumaTotal
from "currentProjet.db" CurrentProject
INNER JOIN "SemanaN.DB" Semanan
ON (Semanan.Cve_proy = Currentproject.Cve_proy) 
where (sem =:Nsemana)
group by Semanan.Sem, campo1, campo2...

pero si la cantidad de registros es muy grande la consulta se volverá muy lenta, ya que hará la suma completa por cada registro de la tabla, así que tienes que evaluar si merece la pena usar este sistema.

Tolón 29-01-2007 23:52:19

Gracias por los consejos.
Ya olvidé ese método y le dí la vuelta al problema :) ...

Hasta pronto !


La franja horaria es GMT +2. Ahora son las 16:26:58.

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