Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

sumar los valores de un campo de todos los registros

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: sumar los valores de un campo de todos los registros Responder citando

Hola
Pues eso, quiero mostrar en un TEdit el valor de la suma de un determinado campo de todos los registros de una tabla.
No se si me explico:
Tengo una tabla en la que hay un campo "valor"
Quiero que me muestre la suma de ese campo de todos los registros.
Muchas gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Pues eso no es muy complicado, si creo que te he entendido lo que quieres hacer, mira para hacer esa y otras cosas, puedes usar un TQuery.
Si siempre es la misma consulta la puedes introducir en tiempo de diseño, si quieres reusar el componente pues bien la metes en tiempo de diseño o bien la cambias cuando quieras, supongamos que no lo haces en tiempo de diseño, y que el TQuery se llama qConsulta (en tiempo de diseño le asignas el nombre y le asignas la BD en cuestión).

Luego en cualquier parte del codigo, haces lo siguiente:
(Supondremos que tienes una tabla que se llama GASTOS_CLIENTES, que contiene un COD_CLIENTE, FECHA, GASTO y que se encuentra indexado por CODIGO_DE_CLIENTE y FECHA (claves primarias) de forma que un cliente tiene un cierto gasto en una cierta fecha y tu quieres obtener la suma de todos los gastos por CLIENTES.

Código:

   // Todos los gastos por clientes
   qConsulta->SQL->Clear();
   qConsulta->SQL->Add("SELECT COD_CLIENTE, SUM(GASTO) AS GASTO");
   qConsulta->SQL->Add("FROM GASTOS_CLIENTES");
   qConsulta->SQL->Add("GROUP BY COD_CLIENTE");
   qConsulta->Prepare();   // Prepara la consulta
   qConsulta->Open();       // Ejecuta la consulta
 
   // Ahora iteramos entre los clientes para ir sacando los datos por pantalla


Si por el contrario lo que queremos es obtener el total de gastos de todos los clientes, pues más facil todavía:

Código:

   // Total de Gastos
   qConsulta->SQL->Clear();
   qConsulta->SQL->Add("SELECT SUM(GASTO) AS GASTO");
   qConsulta->SQL->Add("FROM GASTOS_CLIENTES");
   qConsulta->Prepare();   // Prepara la consulta
   qConsulta->Open();       // Ejecuta la consulta
   qConsulta->First();
   float total_gastos=qConsulta->FieldByName("GASTO")->AsFloat;

   // Si tu TEdit se llama eGastos (por ejemplo) pues:
  eGastos->Text=FloatToStrF(total_gastos, ffCurrency, 6, 2);


Ala!! espero que te sirva.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: no funciona Responder citando

Hola, gracias ante todo.
Lo que quiero hacer es lo segundo que dices (lo facil) pero no me funciona lo que tu me dices.
El campo que tengo que sumar se llama "base" y esta en la tabla "apunte", según lo que me comentas, la instrucción SQL sería:

SELECT SUM(base) AS base FROM apunte ¿no?

gracias
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Si imaginaba que era lo segundo, vamos a ver, imagino que estás trabajando en Builder y usando algun SGBD, como imagino que también tienes un Administrador con el SGBD, prueba directamente a ejecutar la consulta sobre el servidor y sobre la BD en concreto.

Si como bien dices tienes una tabla llamada APUNTE y un campo llamado BASE y este es de tipo Númerico, ya sea integer, float, numeric, etc. pues debería funcionarte, siempre y cuando el SGBD soporte este tipo de funciones agregadas. Aunque en principio debería soportarla ya que es algo muy estandar.

Prueba primero esto:
SELECT SUM(BASE)
FROM APUNTE

El "AS BASE" lo metí para renombrar el campo de salida, sino te aparecera otra cosa.

Repito que te debería funcionar SUM suma todas las tuplas que cumplan la condición en ese caso como no hay ni WHERE ni GROUP pues las sumará todas devolviendo una única tupla con el resultado de sumar el campo BASE de todas las tuplas de la tabla APUNTE.

Si por ejemplo quieres saber cuantas tuplas tienes pues:
SELECT COUNT(*)
FROM APUNTE

(Este ultimo es un comentario para que lo pruebes por si acaso tu SGBD no soportara funciones agregadas, como no has dicho que SGBD utilizas).

Venga suerte y al toro.
En el caso de que no te funcione porque no lo soporte el SGBD puedes hacer varias cosas, una recorrer una a una todas las tuplas en tu programa o intentar crear un trigger o procedimiento almacenado que se invoke cuando tu quieras, el problema de esto ultimo es que si no soporta funciones agregadas tan básicas, no creo que soportara ni TRIGGERs ni PROCEDIMIENTOS ALMACENADOS.

Venga saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.