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 26-05-2013
joselaz joselaz is offline
Miembro
 
Registrado: may 2013
Posts: 10
Poder: 0
joselaz Va por buen camino
ayuda con sum() sql

Hola a todos... Necesito vuestra ayuda...

Intento conseguir sumar (totalizar) una columna llamada importe después de aplicar un select para filtra por nombre de proveedor, es decir, algo algo así como:

Código SQL [-]
datos.anotabl.SQL.Add('select * from anotaciones where prcodan between '+ancodp2.Caption+' and '+ancodp5.Caption);

este código funciona bien... es decir me devuelve una consulta con los proveedores que están dentro de un rango...

es decir necesito tener un grid que me muestre la sql de más arriba(lo cual si funciona bien) y además me muestre el total de sumar los impotes...

Espero haberme explicado bien...

Gracias de antemano, saludos...
Responder Con Cita
  #2  
Antiguo 26-05-2013
joselaz joselaz is offline
Miembro
 
Registrado: may 2013
Posts: 10
Poder: 0
joselaz Va por buen camino
algo más que me faltó !!!

Hola de nuevo, debo añadir, que a su vez, cuando modifique o añada nuevos importes y que sean coincidentes con ese criterio, pues se modifique automaticamente ese total...

gracias de nuevo
Responder Con Cita
  #3  
Antiguo 26-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola joselaz y bienvenido a Club Delphi

Como a todos los que se inician te invitamos a que leas nuestra guía de estilo.

Por favor aporta la mayor cantidad de detalles inherentes a tu pregunta, por ejemplo el RDBMS(bd) con que estas trabajando, ya que hay diferencia de sintáxis entre ellos.

Lo mismo en cuanto al resultado que buscas lograr, por ejemplo:
  • ¿ El resultado deberá ser un dato único, o se presentará como otra columna del DBGrid ?
  • ¿ Es la suma de todos los importes comprendidos en el rango o debe ser discriminada por proveedor ?
  • ¿ Deseas una sumatoria acumulativa ?

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 26-05-2013 a las 22:08:31.
Responder Con Cita
  #4  
Antiguo 26-05-2013
joselaz joselaz is offline
Miembro
 
Registrado: may 2013
Posts: 10
Poder: 0
joselaz Va por buen camino
aporto mas datos

Hola, ante todo, gracias por responder...

Voy a intentar aportar más datos:

-La base de datos está hecha en firebird 2.5
-El datos deberá mostrarse en una etiqueta de texto o similar, no en el dbgrid...Sería como un datos único, que variará al modificar o añadir algún datos nuevo...Iría en una simple etiqueta de texto con formato.
-necesitaría la suma de los importes del rango seleccionado de proveedores, por ej.

nº proveedor importe ..........

23 25,00
23 50,00
23 60,00
24 22,00
24 10,00
25 15,00
26 23,00

ej. rango desde proveedor 24 al 25, el total debería ser 47,00. Si luego añado o modifico algún importe de algún proveedor de ese rango, por ej. el nº 24, pues debe cambiar la suma automaticamente. Así que si modifico por ej. del proveedor nº 24 el importe 10,00 por 12,00 la suma total del rango debe cambiar automaticamente a 49,00.

Espero haber aportado la información adicional necesaria para ayudar a entender mejor lo que necesito hacer.

Muchas gracias...
Responder Con Cita
  #5  
Antiguo 26-05-2013
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
los importes estan en la misma tabla?
estan en una tabla diferente?
seria bueno que colocaras la estructura de tus tablas, para tener una mejor idea
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #6  
Antiguo 27-05-2013
joselaz joselaz is offline
Miembro
 
Registrado: may 2013
Posts: 10
Poder: 0
joselaz Va por buen camino
misma tabla

si, los datos están en la misma tabla....

realmente solo necesito hacer una suma de una columna... una especie de total que aparecerá en una etiqueta, pero de forma que si hago una selección por un rango, pues la suma se limite solo a ese rango, o si modifico algún importe de ese rango pues se modifique la suma automáticamente...

No pongo una imagen de la estructura, porque no sé como insertar la imagen aquí, pero a rasgos generales es lo anterior lo que necesito hacer....

En el pasado pude hacerlo y se que se puede, además debe ser algo básico de sql que no controlo lo suficiente, pero el código fuente lo he perdido y no consigo hacerlo...

saludos...
Responder Con Cita
  #7  
Antiguo 27-05-2013
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
podrias usar la funcion group by

algo asi

Código SQL [-]
select prcodan, nombreproveedor, Sum (Importe)
From Tabla
where (tus condiciones)
Group by prcodan, nombreproveedor
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #8  
Antiguo 27-05-2013
joselaz joselaz is offline
Miembro
 
Registrado: may 2013
Posts: 10
Poder: 0
joselaz Va por buen camino
Smile conseguido

Gracias oscar, lo he logrado hacer siguiendo tus indicaciones, aunque he tenido que usar otra consulta paralela y agrupando por prcodan, de tal manera que el campo resultante del sum(animport) as totalimp es el que asocio al dbedit y al modificar o añadir un dato, hago un refresh a la segunda query y la suma se modifica, que es lo que necesito...

Muchas gracias por vuestra ayuda...
Responder Con Cita
  #9  
Antiguo 27-05-2013
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Cita:
Empezado por joselaz Ver Mensaje
Gracias oscar, lo he logrado hacer siguiendo tus indicaciones, aunque he tenido que usar otra consulta paralela y agrupando por prcodan, de tal manera que el campo resultante del sum(animport) as totalimp es el que asocio al dbedit y al modificar o añadir un dato, hago un refresh a la segunda query y la suma se modifica, que es lo que necesito...

Muchas gracias por vuestra ayuda...
podrias colocar aqui cual fue esa consulta?
si todo esta en una solo tabla no hay mucha ciencia
quiza podamos optimizarla
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #10  
Antiguo 27-05-2013
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Cita:
Empezado por joselaz Ver Mensaje
-El datos deberá mostrarse en una etiqueta de texto o similar, no en el dbgrid
...
Hola joselaz.

Entonces otra opción es hacerte una función para obtener la sumatoria:
Código Delphi [-]
...
function TForm1.GetTotal(const Desde, Hasta: string): Currency;
begin
  with tuOtroADOQuery do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT SUM(IMPORTES) AS SUMA FROM ANOTACIONES');
    SQL.Add('WHERE PRCODAN >= :DESDE AND PRCODAN <= :HASTA');
    Parameters.ParamByName('DESDE').Value := Desde;
    Parameters.ParamByName('HASTA').Value := Hasta;
    Open;
    Result := FieldByName('SUMA').AsCurrency;
    Close;
  end;
end;

Llamada ejemplo:
Código Delphi [-]
  Label1.Caption := FormatFloat('$ 0.00', GetTotal(ancodp2.Caption, ancodp5.Caption));

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #11  
Antiguo 27-05-2013
joselaz joselaz is offline
Miembro
 
Registrado: may 2013
Posts: 10
Poder: 0
joselaz Va por buen camino
otra buena opción ecfisa

Gracias por vuestras respuestas. Sin duda, el código que me pasas es una buena alternativa para optimizar la consulta que tengo echa.Usando los parámetros.
Yo lo tengo echo de una forma más fea y engorrosa:

Código SQL [-]
datos.anotabl.SQL.Add('select * from anotaciones where prcodan between '+ancodp2.Caption+' and '+ancodp5.Caption+' and anfecha between '+chr(39)+FormatDateTime('mm/dd/yyyy', anofechini.date)+chr(39)+' and '+chr(39)+FormatDateTime('mm/dd/yyyy', anofechfini.date)+chr(39));

Lo pongo para que vean , pero realmente me hubiera resultado mejor y más manejable, usar parámetros...

Muchas gracias. saludos...
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
Instalar Ayuda (.HLP) en la Ayuda de Delphi? MasterXP Varios 6 12-04-2006 06:57:49
Ayuda para crear ayuda... Gabriel2 Varios 2 10-06-2005 00:15:18
Leer la ayuda... Ayuda! MaJeSTiC Varios 0 04-08-2004 21:24:42
ayuda con strtofloat, ayuda punto flotante TURING Varios 5 30-04-2004 08:03:59
Ayuda Con Instalacion De Archivos De Ayuda Legolas Varios 1 01-12-2003 14:48:03


La franja horaria es GMT +2. Ahora son las 16:33:40.


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