Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-01-2010
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 23
salvica Va por buen camino
Red face Quitar NULL de SUM()

Hola a tod@s y Feliz 2010

Tengo tres tablas (RECIBOS, INGRESOS y GASTOS) y deseo sacar el total ingresado y gastado en cada recibo, teniendo en cuenta que puede haber meses que no haya ingresos o gastos.
Para ello hago la siguiente consulta (en SQLITE-3):
Código SQL [-]
SELECT recibos.ID_CLAVE AS ID_RECIBO,
       recibos.MONTH AS MONTH,
      ( SELECT recibo_ingresos.CANTIDAD
          FROM recibo_ingresos
         WHERE recibo_ingresos.ID_RECIBO = recibos.ID_CLAVE
      ) AS ALQUILER,
      ( SELECT SUM(recibo_ingresos.TOTAL)
          FROM recibo_ingresos
         WHERE recibo_ingresos.ID_RECIBO = recibos.ID_CLAVE
      ) AS TOTAL_INGRESOS,
      ( SELECT SUM(CASE WHEN recibo_gastos.TOTAL ISNULL
                             THEN 0
                             ELSE recibo_gastos.TOTAL
                   END)
          FROM recibo_gastos
         WHERE recibo_gastos.ID_RECIBO = recibos.ID_CLAVE
      ) AS TOTAL_GASTOS
  FROM recibos
 WHERE recibos.ID_CONTRATO = "0000000024"
   AND recibos.YEAR = "2009"
El problema que se me plantea es que no puedo quitar los NULL del campo TOTAL_GASTOS.

¿Alguien sabe como se hace?

Gracias adelantadas
Salvica
Responder Con Cita
  #2  
Antiguo 04-01-2010
Avatar de defcon1_es
defcon1_es defcon1_es is offline
Miembro
 
Registrado: mar 2004
Ubicación: Cuenca - España
Posts: 533
Poder: 23
defcon1_es Va por buen camino
Hola. Prueba con la función COALESCE.
Código SQL [-]
SELECT recibos.ID_CLAVE AS ID_RECIBO,        
recibos.MONTH AS MONTH,       
COALESCE( (SELECT recibo_ingresos.CANTIDAD FROM recibo_ingresos 
              WHERE recibo_ingresos.ID_RECIBO = recibos.ID_CLAVE), 0) AS ALQUILER,       
COALESCE( (SELECT SUM(recibo_ingresos.TOTAL) FROM recibo_ingresos 
              WHERE recibo_ingresos.ID_RECIBO = recibos.ID_CLAVE), 0) AS TOTAL_INGRESOS,       
COALESCE( (SELECT SUM(CASE WHEN recibo_gastos.TOTAL ISNULL THEN 0 ELSE recibo_gastos.TOTAL END)
              FROM recibo_gastos WHERE recibo_gastos.ID_RECIBO = recibos.ID_CLAVE), 0) AS TOTAL_GASTOS   
FROM recibos  
WHERE recibos.ID_CONTRATO = "0000000024"    AND 
          recibos.YEAR = "2009"
__________________
Progress Openedge
https://abevoelker.com/progress_open...dered_harmful/


Delphi forever...
Responder Con Cita
  #3  
Antiguo 04-01-2010
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 23
salvica Va por buen camino
Cita:
Empezado por defcon1_es Ver Mensaje
Hola. Prueba con la función COALESCE.
Código SQL [-]SELECT recibos.ID_CLAVE AS ID_RECIBO, recibos.MONTH AS MONTH, COALESCE( (SELECT recibo_ingresos.CANTIDAD FROM recibo_ingresos WHERE recibo_ingresos.ID_RECIBO = recibos.ID_CLAVE), 0) AS ALQUILER, COALESCE( (SELECT SUM(recibo_ingresos.TOTAL) FROM recibo_ingresos WHERE recibo_ingresos.ID_RECIBO = recibos.ID_CLAVE), 0) AS TOTAL_INGRESOS, COALESCE( (SELECT SUM(CASE WHEN recibo_gastos.TOTAL ISNULL THEN 0 ELSE recibo_gastos.TOTAL END) FROM recibo_gastos WHERE recibo_gastos.ID_RECIBO = recibos.ID_CLAVE), 0) AS TOTAL_GASTOS FROM recibos WHERE recibos.ID_CONTRATO = "0000000024" AND recibos.YEAR = "2009"
Hola defcon1_es, ante todo gracias por responder, probaré el método aunque no me suena esa función en SQLite-3.

De todas formas luego te cuento como me ha ido.

Saludos
salvica
Responder Con Cita
  #4  
Antiguo 04-01-2010
Avatar de droguerman
droguerman droguerman is offline
Miembro
 
Registrado: abr 2005
Ubicación: tierra
Posts: 999
Poder: 22
droguerman Va por buen camino
en SQLite es IFNULL
http://www.sqlite.org/lang_corefunc.html#ifnull
__________________
self.free;
Responder Con Cita
  #5  
Antiguo 04-01-2010
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 23
salvica Va por buen camino
Gracias defcon1_es, funciona perfectamente.

Cita:
Empezado por droguerman Ver Mensaje
Hola droguerman, era lo que yo pensaba pero según la documentación de SQLite (acabo de verlo) si TODOS los campos son NULL, SUM() devuelve NULL, y se recomienda que se utilice la función TOTAL() que, (en este caso particular), devuelve un CERO en formato FLOAT.

Habia visto en algunas consultas el COALESCE, pero creo que referida a Firebird y no caí en utilizarla.

Gracias a los dos por la aportación.
salvica
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
Comparar con Null toni.vi SQL 4 24-12-2009 15:55:22
cambiar campo null a not null andressanchez Firebird e Interbase 8 18-09-2006 22:00:09
Null y UDF ARPE Firebird e Interbase 0 08-09-2004 10:56:20
Null y Delphi 7 buitrago Varios 2 08-12-2003 17:59:40
campo null anay Varios 1 14-11-2003 19:49:13


La franja horaria es GMT +2. Ahora son las 22:59:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi