Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Trucos (https://www.clubdelphi.com/foros/forumdisplay.php?f=52)
-   -   Desglosar consulta SQL (https://www.clubdelphi.com/foros/showthread.php?t=80702)

dec 01-07-2006 02:14:46

Desglosar consulta SQL
 
A veces tenemos que realizar consultas normes o sumamente complicadas.

En lugar de quebrarnos la cabeza veriguando cómo escribirlas y si se ejecutarán tan rápido como queremos en el servidor, podemos desglosar esa consulta en consultas menores, guardarlas en querys distintos y sincronizar estos querys.

Por ejemplo, tenemos una tabla con los campos CODIGO, NOMBRE, CANTIDAD1, CANTIDAD2. Donde CODIGO es la clave primaria,NOMBRE es su denominación y CANTIDAD1, CANTIDAD2 son valores numéricos.

Nos piden que agrupemos por el NOMBRE y sumemos CANTIDAD1 y CANTIDAD2. Lo hariamos asi:

Código SQL [-]
select NOMBRE, sum(CANTIDAD1), sum(CANTIDAD2)
from tabla
group by NOMBRE

El problema es que CANTIDAD1 y CANTIDAD2 pueden contener nulos y basta que un sólo registro tenga un valor nulo para que la suma sea tambien nula.

Como lo hacemos???

Bien... desglosemos esta consulta en otras subconsultas:

Query 1:

Código SQL [-]
select NOMBRE
from tabla
group by NOMBRE

Query 2:

Código SQL [-]
select sum(CANTIDAD1) as TOTAL1
from tabla
where NOMBRE=:NOMBRE
and CANTIDAD1 is not null

Query 3:

Código SQL [-]
select sum(CANTIDAD2) as TOTAL2
from tabla
where NOMBRE=:NOMBRE
and CANTIDAD2 is not null

En el evento 'OnCalcField' del Query1 programamos el siguiente código:

Código Delphi [-]
Query2.close;
Query2.paramByName('NOMBRE').value:=Query1NOMBRE.value;
Query2.open;

Query3.close;
Query3.paramByName('NOMBRE').value:=Query1NOMBRE.value;
Query3.open;

Query1TOTAL1.value:=Query2TOTAL1.value;
Query1TOTAL2.value:=Query3TOTAL2.VALUE;

Donde TOTAL1 y TOTAL2 son dos campos calculados del Query1 que se actualizan con los valores devueltos por las consultas Query2 y Query3.

De esta forma podemos desglosar una consulta y convertirla en consultas más sencillas.


La franja horaria es GMT +2. Ahora son las 12:58:21.

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