Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-02-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Consulta simple y con sumas

Hola gente!!!. A medida que voy progresando en el desarrollo de una aplicación para personal aparecen dudas sobre las consultas que debo realizar en SQL ya que hace muy poco que empece con Firebird.

Hoy el tema es el siguiente: Una de mis tablas llamada inasistencias registra eso "Inasistencias" y lo que debo realizar es el calculo de los días que ha faltado el personal. Los campos de dicha tabla son

Id, IdAgente, Fecha, Periodo, Tipo, FaltaJust, FaltaInj, TardeJust, TardeInj y Observaciones

La idea es que seleccionando el agente me liste las veces que ha faltado. Hasta ahi todo bien:

Código Delphi [-]
 With Filtro do
  Begin
    Close;
    SQL.Clear;
    SQL.Add('Select * From Inasistencias Where Fecha >= :FDesde and Fecha <=:FHasta and IDAGente = :Cod');
    SQL.Add('Order By Fecha');
    ParamByName('FDesde').Value := Desde.DateTime;
    ParamByName('FHasta').Value := Hasta.DateTime;
    ParamByName('Cod').Value := CodigoAgente;
    Open;
  End;

El tema es que ademas necesito que en la barra de estado (StatusBar) me de el total (suma por separado) de cada tipo de inasistencia TardeJust,TardeInj,FaltaJust y FaltaInj.

Filtro es un IBQuery y los campos que necesito sumar contiene la cantidad de días que han faltado o llegado tarde.

Gracias y saludos.-
Responder Con Cita
  #2  
Antiguo 03-02-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Prueba a utilizar la función SUM(campo1), SUM(campo2) en la parte de los campos de la sentencia SQL.
En tu caso si los campos donde anotas las faltas ya contienen el entero con los día, eso debería devolver el resultado.

Al final un GROUP BY por el ID y te debería devolver las sumas...

Código SQL [-]
SELECT ID, SUM(FaltaJust), SUM(FaltaInj), SUM(TardeJust), SUM(TardeInj) FROM...
...
GROUP BY ID

Échale un vistazo a la ayuda sobre el SUM o buscas en los foros y encontrarás más ejemplos para acabar de entenderlo.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #3  
Antiguo 03-02-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Hola Neftali: Gracias por la respuesta. Ahora bien, me surge un inconveniente ya que si agrupo no veo el detalle y si listo no veo los totales Hay alguna forma de conbinar las dos sentencias SQL en una sola??

Código Delphi [-]
  With Filtro do
  Begin
    Close;
    SQL.Clear;
    SQL.Add('Select * From Inasistencias Where IdAgente = :Cod');
    SQL.Add('Order By Fecha');
    ParamByName('Cod').AsInteger := CodigoAgente;
    Open;
  End;
  With Calculo do
  Begin
    Close;
    Sql.Clear;
    Sql.Add('Select IdAgente, Sum(TardeJust) as TJ, Sum(TardeInj) As TI, Sum(Faltajust) As FJ, Sum(FaltaInj) as FI From Inasistencias Where IdAgente = :Cod');
    Sql.Add('Group by IdAgente');
    ParamByName('Cod').AsInteger := CodigoAgente;
    open;
  End;
  StatusBar1.Panels[1].Text := IntToStr(Calculo.FieldByName('FJ').AsInteger);
  StatusBar1.Panels[3].Text := IntToStr(Calculo.FieldByName('FI').AsInteger);
  StatusBar1.Panels[5].Text := IntToStr(Calculo.FieldByName('TJ').AsInteger);
  StatusBar1.Panels[7].Text := IntToStr(Calculo.FieldByName('TI').AsInteger);

Gracias nuevamente...
Responder Con Cita
  #4  
Antiguo 03-02-2012
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Tal vez asi:
Código Delphi [-]
With Filtro do
  Begin
    Close;
    SQL.Text:= 'Select Id, IdAgente, Fecha, Periodo, Tipo, FaltaJust, FaltaInj, TardeJust, TardeInj, Observaciones '+
               '(Select IdAgente, Sum(TardeJust) as TJ, Sum(TardeInj) As TI, Sum(Faltajust) As FJ, Sum(FaltaInj) as FI) '+
               ' From Inasistencias Where IdAgente = :Cod '+
               ' Group by IdAgente';
    ParamByName('Cod').AsInteger := CodigoAgente;
    Open;
  End;
  StatusBar1.Panels[1].Text := IntToStr(Filtro.FieldByName('FJ').AsInteger);
  StatusBar1.Panels[3].Text := IntToStr(Filtro.FieldByName('FI').AsInteger);
  StatusBar1.Panels[5].Text := IntToStr(Filtro.FieldByName('TJ').AsInteger);
  StatusBar1.Panels[7].Text := IntToStr(Filtro.FieldByName('TI').AsInteger);
Saludos
__________________
Siempre Novato
Responder Con Cita
  #5  
Antiguo 03-02-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
O si necesitas ambas cosas, tal vez debas hacer 2 consultas separadas, pero no me queda claro qué es exactamente lo que necesitas.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #6  
Antiguo 04-02-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Cita:
Empezado por Neftali Ver Mensaje
O si necesitas ambas cosas, tal vez debas hacer 2 consultas separadas, pero no me queda claro qué es exactamente lo que necesitas.
Si, Necesito ambas cosas. En el form hay un dbgrid donde se lista por fechas las veces que ha faltado y en el Status bar dividido en paneles donde se muestra la suma de cada llegada tarde y falta. En el codigo que presente después del primer mensaje hice como decis, 2 consultas separadas (filtro para lista y calculo para sumas - ambos Ibquery) pero quería saber si se puede expresar en una sola. Me queda probar lo del amigo Caral y veremos si funciona si no me quedo con las 2 consultas.-

Saludos
Responder Con Cita
  #7  
Antiguo 06-02-2012
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.286
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Creo que no, salvo cosas raras, porque piensa que en una consulta necesitas TODOS los datos, y en la otra justo lo que necesitas es eliminar "datos superfluos" para quedarte con las agrupaciones (suma de horas/cantidades).
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #8  
Antiguo 06-02-2012
MartinS MartinS is offline
Miembro
NULL
 
Registrado: nov 2011
Ubicación: Villa Cacique - Argentina
Posts: 283
Poder: 13
MartinS Va por buen camino
Solucionado!

Me quedo con las 2 consultas separadas. Probé la opción de Caral pero me da error en el segundo select. En definitiva no se si haciendo las 2 consultas es lo mas elegante pero en algún lado de este foro también vi:

-Si funciona para que reprogramarlo!!!

Saludos y gracias por su tiempo y su predisposición.
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
Consulta de sumas jplj SQL 2 30-09-2008 07:19:25
consulta simple Patricio Varios 4 30-04-2007 21:02:48
Realizar una consulta con sumas jfragueiro SQL 2 25-05-2005 10:02:50
Consulta Simple HELP marceloalegre Varios 2 11-05-2005 03:45:05
Consulta simple TQRDBText niogon Impresión 1 03-03-2004 18:32:19


La franja horaria es GMT +2. Ahora son las 10:43: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
Copyright 1996-2007 Club Delphi