Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 13-10-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Como usar el CASE en 2 SubConsultas ????

Buen día, tengo una pregunta que no he podido responderme, lo que pasa es que tengo 1 consulta maestra con algunas subconsultas, estas subconsultas me regresan ciertos valores de tipo flotante mediante alguna suma ó resta, este resultado participan 2 select independientes, por lo que si en dicho resultado cae en 0.01 Centavos quiero dejar el resultado en CERO, pongo el ejemplo:
Código SQL [-]
/*Select Maestro*/
SELECT V.CLAVE,V.NOMBRE,C.CLIENTE,CC.NOMCLI, 

/*Primer SubConsulta*/
(FUD_ROUND((SELECT COALESCE(SUM(FUD_ROUND(IMPORTE,2)),0) FROM TCARGOS WHERE CAST('12.10.2006' AS DATE) - FECHAMOV <15 AND FECHAMOV<='12.10.2006' AND CARABO = 1 AND CLIENTE = C.CLIENTE AND CVEDOCUM <>'CREM')
 -
/*Segunda SubConsulta*/
(SELECT COALESCE(SUM(FUD_ROUND(IMPORTE,2)),0) FROM TABONOS WHERE CAST('12.10.2006' AS DATE) - FECHAFAC <15 AND FECHAMOV<='12.10.2006' AND CARABO = 2 AND CLIENTE = C.CLIENTE ),2)) VNORMAL, 
......
El Resultado del Primer Select - Segundo Select = un Valor, dicho valor quiero saber si no pasa del Tope de 0.01 ó 0.02 Centavos, si es el caso, el Resultado lo tengo que dejar a CEROS, ya probe con el CASE, pero es a nivel de Select y no puedo usarlo a nivel de 2 Select, esta consulta SQL lo hago para mostrar datos en el QReport, pongo el ejemplo de como aparecen los datos:
VNORMAL 15DIAS 30 DIAS 45 DIAS TOTAL
800.00 200.00 400.00 0.01 $1,400.01

Lo que podría hacer sería que en cada uno de los QrDBLabel,dentro del evento OnPrint, validar dicho valor para mostrar en ceros, pero tendría que hacerlo también en el Total dentro de la suma que uso en el QrExpr, donde tengo en la propiedad Expression lo siguiente:
Código Delphi [-]
ibQuery.VNORMAL+ibQuery.V15DIAS+ibQuery.V30DIAS+ibQuery.V40DIAS
Alguien sabe como hacer una condicionante dentro de la propiedad Expression????

Sería algo por el estilo:
Código Delphi [-]
(Case ibQuery.VNORMAL > 0.01  Then
ibQuery.VNORMAL ELSE 0 END ) +
(Case ibQueryGral.V15DIAS > 0.01  Then
ibQueryGral.V15DIAS ELSE 0 END ) +
.....

Código:
Quedaría asi:
VNORMAL    15DIAS    30 DIAS     45 DIAS      TOTAL
  800.00      200.00     400.00          0           $1,400.00
OJO PARA LOS ADMINISTRADORES DEL CLUB: Dejo bien Acomodado el EJEMPLO de arriba y se me DESORDENA cuando grabo el HILO.

Espero me haya explicado....
Agradezco cualquier sugerencia.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King

Última edición por AGAG4 fecha: 13-10-2006 a las 19:45:49.
Responder Con Cita
  #2  
Antiguo 13-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Cita:
Empezado por AGAG4
OJO PARA LOS ADMINISTRADORES DEL CLUB: Dejo bien Acomodado el EJEMPLO de arriba y se me DESORDENA cuando grabo el HILO.
No soy administrador, que solamente lo es Emilio, pero si soy moderador... aún así, no entiendo a que ejemplo te referís específicamente. Si es al que está debajo de "Quedaría así:", te comento que html se "come" los espacios que haya dentro de los textos. Es su comportamiento normal. Si queres que las columnas se vean correctamente formateadas usando espacios, como si fuese una tabla, entonces valete de la etiqueta [code]. Dentro de ella, forzamos a que HTML no se coma los espacios (haciendole creer que se trata de un fragmento de código).

Con respecto de tu duda, podes valerte de una vista intermedia o de un stored procedure para conseguir el efecto que buscas.

Explotando la idea de la vista, dejás el query tal como lo tenes y lo usas para crear una vista así:
Código SQL [-]
create view VistaAGAG (clave, nombre, cliente, nomcli, vnormal, v15, v30, v45, total) as
Select v.clave, v.nombre... --etc
  (select -- subconsulta 1
  ) - 
  (select -- subconsulta 2
  ),
  -- etc;
;

Luego, seleccionas sobre esta vista:

Código SQL [-]
  Select clave, nombre, cliente, nomcli, vnormal, 
    case v15
      when 0.01 then 0
      else v15
    end v15,
    -- etc
  from VistaAGAG
 where condiciones;

Espero haberme explicado, si no, me avisas y veo la manera de darte un ejemplo mas concreto.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #3  
Antiguo 13-10-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Gracias jachguate por los 2 consejos, ya le puse el CODE y se mejoro el aspecto, con respecto a lo que me comentas voy hacer pruebas..... ahorita te informo que paso....
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King
Responder Con Cita
  #4  
Antiguo 13-10-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
El único y gran problema que le veo a las vistas es que en las Subconsultas uso fechas que le paso como parámetro al momento de armar la sentencia SQL dentro de Delphi, y como No muestro FECHAS y No debo hacerlo dentro de la Sentencia por cuestiones de Agrupamiento (Agrupado por Cliente), es por eso que en la vista no me funcionaría porque si revisa bien, tengo los parámetros de Fecha Fijos, y tendría que asignarselo en alguna parte a la vista como parámetro.

Espero haberme explicado con claridad.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King

Última edición por AGAG4 fecha: 13-10-2006 a las 20:33:19.
Responder Con Cita
  #5  
Antiguo 13-10-2006
Avatar de jachguate
jachguate jachguate is offline
Miembro
 
Registrado: may 2003
Ubicación: Guatemala
Posts: 6.254
Poder: 28
jachguate Va por buen camino
Desconozco la forma en que debiera funcionar tu consulta, pero si precisas acotar por fechas, queda la opción de hacerlo dentro de un procedimiento almacenado que reciba estas como parámetro.

Hasta luego.

__________________
Juan Antonio Castillo Hernández (jachguate)
Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate
Responder Con Cita
  #6  
Antiguo 13-10-2006
Avatar de AGAG4
AGAG4 AGAG4 is offline
Miembro
 
Registrado: ago 2004
Ubicación: Los Mochis, Sinaloa, México
Posts: 1.420
Poder: 21
AGAG4 Va por buen camino
Estoy continuando por el QrExpr metiendole condiciones en la propiedad Expression, del cual lo hago de la siguiente manera:
Código Delphi [-]
qrExprTotReg.Expression:='IF(ibQueryGral2.VNORMAL > 0.02 ,ibQueryGral2.VNORMAL,0)+IF(ibQueryGral2.V15DIAS > 0.02 ,ibQueryGral2.V15DIAS,0)+IF(ibQueryGral2.V30DIAS > 0.02 ,ibQueryGral2.V30DIAS,0)';
Aqui si me hace el filtro correcto de dejarme en CEROS el campo dentro del QReport, pero si quiero filtrar los que sean menores a -0.02 no me los filtra inclusive me muestra en BLANCO, al cachar el valor que toma me pone lo siguiente :

Wrong Arguments for IF

Y lo hago de la siguiente manera:
Código Delphi [-]
qrExprTotReg.Expression:='
IF(ibQueryGral2.VNORMAL < -0.02,ibQueryGral2.VNORMAL,0)+
IF(ibQueryGral2.V15DIAS < -0.02,ibQueryGral2.V15DIAS,0)+
IF(ibQueryGral2.V30DIAS < -0.02,ibQueryGral2.V30DIAS,0)+
IF(ibQueryGral2.V45DIAS < -0.02,ibQueryGral2.V45DIAS,0)+
IF(ibQueryGral2.V60DIAS < -0.02,ibQueryGral2.V60DIAS,0)+
IF(ibQueryGral2.V75DIAS < -0.02,ibQueryGral2.V75DIAS,0)+
IF(ibQueryGral2.V90MDIAS < -0.02,ibQueryGral2.V90MDIAS,0)';

Si ven, es lo mismo que la anterior con la diferencia que cambio de > 0.02 a < -0.02 no veo el problema.
__________________
"Hemos aprendido a volar como los Pájaros, y a nadar como los Peces, y todavía No aprendemos a vivir como Hermanos". Martin Luther King

Última edición por AGAG4 fecha: 13-10-2006 a las 23:49:51.
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
¿Como hacer que LIKE no sea case-sensitive? JuanBCT SQL 3 04-08-2006 21:50:28
Problemas al usar case David OOP 5 28-07-2006 17:14:19
Subconsultas c748a SQL 0 19-04-2005 13:41:23
SubConsultas Carlex SQL 3 05-08-2004 14:23:55
Subconsultas en ORACLE Investment Oracle 4 19-06-2003 00:50:04


La franja horaria es GMT +2. Ahora son las 03:50:49.


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