Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros temas > Trucos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Los mejores trucos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 01-07-2006
Avatar de dec
dec dec is offline
Moderador
 
Registrado: dic 2004
Ubicación: Alcobendas, Madrid, España
Posts: 13.107
Poder: 34
dec Tiene un aura espectaculardec Tiene un aura espectacular
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.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 07:52:16.


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