PDA

Ver la Versión Completa : suma de un campo sql


noe
19-01-2004, 15:57:58
saludos a todos los del foro, disculpen tengo el siguiente problema, no se como realizar la sumatoria de esta consulta en la cual tengo los siguientes campos:
'Folio'
'Matricula'
'UltSem'
'Semana'
'BuenoPor'
'CantidadDe'
'Concepto'
'Fecha'
'Horario'
'Debe'
'Nombre'

query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select *');
Query1.SQL.Add('from Cobranza.db');
Query1.sql.Add('Where upper(matricula) like :mat');
Query1.ParamByName('mat').AsString:='%'+uppercase(edit1.text)+'%';
Query1.Open;

Mi pregunta es como sumo el total del campo 'BuenoPor', del resultado de la consulta de un alumno.

y en donde se coloca el resultado, en un componente?
Gracias de antemano
saludos!

Nuria
19-01-2004, 16:03:00
Hola Noe:

Query1.Sql.Add ('Select SUM(BuenoPor) from ....');

El resultado sería la columna BuenoPor.

Si tienes alguna duda pregunta.

Saludos. ;)

__cadetill
19-01-2004, 16:05:48
query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre, sum(BuenoPor)');
Query1.SQL.Add('from Cobranza.db');
Query1.SQL.Add('Where upper(matricula) like :mat');
Query1.SQL.Add('group by Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre');
Query1.ParamByName('mat').AsString:='%'+uppercase(edit1.text)+'%';
Query1.Open;


Espero te sirva

__cadetill
19-01-2004, 16:07:45
Bueno, quizás la respuesta de Nuria sea más acertada :D

noe
19-01-2004, 16:24:56
disculpenj pero me da el error:
Query1: Field 'BuenoPor' not found

y en que componente voy a ver el resultado de la consulta

gracias

Nuria
19-01-2004, 16:36:28
Query1: Field 'BuenoPor' not found

1.- Comprueba que el campo de la tabla se llame 'BuenoPor'.

2.- Pincha dos veces en el objeto Query1 que tienes, si te aparece algún campo, debe de aparecer el 'BuenoPor', sino añadeselo.


y en que componente voy a ver el resultado de la consulta

Por ejemplo, si lo enlazas a un DataSet que esta asociado a un DBEdit.

O bien accediendo directamente: Query1.FieldByName('BuenoPor').AsInteger;

No sé si me explicado bien..... ;)

noe
19-01-2004, 17:09:14
gracias Nuria, por contestar y molestarte en responder a mi pregunta, son muy amables, pero meti el codigo que me dijo catedill que es el siguiente y me da el error que te mencione anteriormente, lo que necesito es que me sume los registros del campo 'BuenoPor', es para saber la suma del estado de cuenta de un alumno de los pagos que ha hecho.
y la pregunta mas importante, en donde coloco la sumatoria del campo 'Bueno Por' para que se muestre en un componente edit.

Aqui esta el codigo que tengo ahorita, que fue el que me dio catedill, ah y el campo bueno por si lo tengo en el query.


query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre, sum(BuenoPor)');
Query1.SQL.Add('from Cobranza.db');
Query1.SQL.Add('Where upper(matricula) like :mat');
Query1.SQL.Add('group by Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre');
Query1.ParamByName('mat').AsString:='%'+uppercase(edit1.text)+'%';
Query1.Open;


gracias nuria una vez mas.

__cadetill
19-01-2004, 17:28:24
Bueno, es normal que te de ese error, falta por poner en la consulta el nombre que se le quiere dar a la columna de suma (que no es, por defecto, ni mucho menos ese :D)

Quedaría algo así:


query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre, sum(BuenoPor) as BuenoPor');
Query1.SQL.Add('from Cobranza.db');
Query1.SQL.Add('Where upper(matricula) like :mat');
Query1.SQL.Add('group by Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre');
Query1.ParamByName('mat').AsString:='%'+uppercase(edit1.text)+'%';
Query1.Open;

noe
19-01-2004, 17:58:43
Gracias cadetill, pero en donde se muestra la suma del campo, es decir en que campo o en que componente lo podria poner, por ejemplo si un alumno realizo un pago de 200, y en otro registro un pago de 300, la suma da 500 en donde se mostrara esa suma.
repito el codigo que me diste.


query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('select Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre, sum(BuenoPor) as BuenoPor');
Query1.SQL.Add('from Cobranza.db');
Query1.SQL.Add('Where upper(matricula) like :mat');
Query1.SQL.Add('group by Folio, Matricula, UltSem, Semana, CantidadDe,');
Query1.SQL.Add(' Concepto, Fecha, Horario, Debe, Nombre');
Query1.ParamByName('mat').AsString:='%'+uppercase(edit1.text)+'%';
Query1.Open;


gracias cadetill

__cadetill
19-01-2004, 18:01:50
Bueno, pues puedes mostrarlo donde más te plazca/convenga como te ha comentado Nuria. Puedes untilizar un DBGrid, un DbText, mostrar simplemente un mensaje,...... La pregunta más bien sería: ¿qué es lo que quieres hacer con el dato? A partir de ahí, discutimos la jugada ;)

noe
19-01-2004, 18:08:23
la verdad esta linea no le entiendo nada porque as BuenoPor
sum(BuenoPor) as BuenoPor

y como muestras el resultado de la suma de la consulta en un componente.
haber si me explique mejor
gracias.

noe
19-01-2004, 18:10:04
la verdad esta linea no le entiendo nada porque as BuenoPor
sum(BuenoPor) as BuenoPor

y como muestras el resultado de la suma de la consulta en un componente.
haber si me explique mejor
gracias y disculpa.

noe
19-01-2004, 18:13:10
la verdad esta linea no le entiendo nada porque as BuenoPor
sum(BuenoPor) as BuenoPor

y como muestras el resultado de la suma de la consulta en un componente edit.
haber si me explique mejor
gracias y disculpa.

__cadetill
19-01-2004, 18:22:40
Veamos

la verdad esta linea no le entiendo nada porque as BuenoPor
sum(BuenoPor) as BuenoPor

con el as lo que hacemos es decirle a la sentencia SQL que nos devuelva esa columna con el nombre que nosotros queramos (como si le hubieramos puesto "PepitoPalotes"). Sirve para cambiar el nombre que devuelve por defecto el SQL de una columna.


y como muestras el resultado de la suma de la consulta en un componente.
haber si me explique mejor
gracias y disculpa.
Bueno, como no me concretas exactamente que es lo que quieres hacer el resultado, te pondré 2 ejemplos que espero te ayuden a escoger

Ejemplo 1: Visualizar el resultado de la sentencia SQL en componentes DataAware. ¿Cómo hacerlo? Sencillo. Enganchamos al formulario el componente TQuery (en que se lanza la consulta), un componente TDataSource y, por ejemplo, un TDBGrid. Los unimos de la siguiente manera: TDBGrid (propiedad DataSource) --> TDataSource (propiedad DataSet) --> TQuery.

Ejemplo 2: Visualizar el resultado en un TLabel y/o mostrarlo mediante un ShowMessage. ¿Cómo hacerlo? Sencillo también. Mira el código que te pongo a continuación:


var
i: string;
begin
.....
Query1.Open;
i := FormatFloat('#,##0.00', Query.FieldByName('BuenoPor').AsFloat);
Label1.Caption := i;
ShowMessage('La suma es ' + i);


Bueno, espero te sirva

noe
19-01-2004, 18:45:19
si mira te lo voy a describir detalladamente, yo tengo losiguiente:
cuando hago una consulta del estado de cuenta de un alumno, me muestra todos los pagos que ha realizado. si yo consulto por la matricula de x alumno, se muestran todos los registros de pagos que ha realizado ese alumno ejemplo.
Folio Matricula Nombre UltSem semana Buenopor
1 ti-04-3 rodrigo ramirez 4 3 4 200
2 ti-04-3 rodrigo ramirez 17 16 17 200

este es mi resultado de la consulta y deseo poner la suma del campo 'BuenoPor' en un Edit.
Logicamente el resultado que se tiene que poner en el edit del formulario es 400 eso es todo.

Gracias!

__cadetill
19-01-2004, 18:51:04
Bueno, pues entonces será el ejemplo 2 el que te servirá

noe
19-01-2004, 18:52:54
si mira te lo voy a describir detalladamente, yo tengo losiguiente:
cuando hago una consulta del estado de cuenta de un alumno, me muestra todos los pagos que ha realizado. si yo consulto por la matricula de x alumno, se muestran todos los registros de pagos que ha realizado ese alumno ejemplo.
Folio Matricula Nombre UltSem semana Buenopor
1 ti-04-3 rodrigo ramirez 4 3 4 200
2 ti-04-3 rodrigo ramirez 17 16 17 200

este es mi resultado de la consulta y deseo poner la suma del campo 'BuenoPor' en un Edit.
Logicamente el resultado que se tiene que poner en el edit del formulario es 400 eso es todo.

Gracias!