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 18-12-2008
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
NULL's como cero en SELECT

Saludos...

Tengo una consulta SELECT donde un campo tipo FLOAT me devuelve NULL en algunos casos, pero necesito utilizar este valor para unirlo en otra consulta y realizar una operación matemática, pero si realizo una operación con un NULL el resultado me da NULL, y quisiera entonces que NULL me lo tomara como cero, ahora no tengo el código SQL, es que me lo consultó una amiga, pero es algo más o menos asi:

Código SQL [-]

SELECT Tabla1.*, Tabla2.*, ((SELECT SUM(CampoFloat) FROM Tabla3 WHERE Tabla1.Folio= Tabla2.Tabla1) + Tabla1.OtroCampoFloat ) AS Suma
ORDER BY Tabla1.Folio;

El caso es que si en
Código SQL [-]
SELECT SUM(CampoFloat) FROM Tabla3 WHERE Tabla1.Folio= Tabla2.Tabla1)
me devuelve NULL y en Tabla1.OtroCampoFloat aunque tenga un valor, esta suma me devuelve NULL. Quisiera si se puede que el NULL del SELECT SUM me lo tomara como cero para que al realizar la suma no se perdiera el valor de Tabla1.OtroCampoFloat.

Ojalá me explique, porque creo que ni yo me entiendo.
Por su ayuda gracias desde ya.
__________________
Herr Heins Faust
Responder Con Cita
  #2  
Antiguo 18-12-2008
Avatar de jhonny
jhonny jhonny is offline
Jhonny Suárez
 
Registrado: may 2003
Ubicación: Colombia
Posts: 7.058
Poder: 29
jhonny Va camino a la famajhonny Va camino a la fama
Si estan usando FB 1.5 o superior, pueden hacer uso de la función coalesce.
__________________
Lecciones de mi Madre. Tema: modificación del comportamiento, "Pará de actuar como tu padre!"

http://www.purodelphi.com/
http://www.nosolodelphi.com/
Responder Con Cita
  #3  
Antiguo 18-12-2008
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por jhonny Ver Mensaje
Si estan usando FB 1.5 o superior, pueden hacer uso de la función coalesce.
Perdón, pero esa info nola dí...

Estoy usando Interbase 6.0 y Delphi 7 sobre WinXP Pro
__________________
Herr Heins Faust
Responder Con Cita
  #4  
Antiguo 18-12-2008
Avatar de TOPX
TOPX TOPX is offline
Miembro
 
Registrado: may 2008
Ubicación: Bogotá
Posts: 527
Poder: 16
TOPX Va camino a la fama
Saludos,

El maestro Jhonny, quiso decir que si Faust está usando FireBird 1.5 o superior, puede hacer algo como:

Código SQL [-]
SELECT COALESCE(SUM(CampoFloat), 0) FROM Tabla3 WHERE Tabla1.Folio= Tabla2.Tabla1

No recuerdo si en IB 6 se podría, pero puede probarlo...
__________________
"constructive mind, destructive thoughts"
Responder Con Cita
  #5  
Antiguo 18-12-2008
Avatar de Faust
Faust Faust is offline
Miembro
 
Registrado: abr 2006
Ubicación: México D.F.
Posts: 930
Poder: 19
Faust Va por buen camino
Cita:
Empezado por TOPX Ver Mensaje
Saludos,

El maestro Jhonny, quiso decir que si Faust está usando FireBird 1.5 o superior, puede hacer algo como:

Código SQL [-]SELECT COALESCE(SUM(CampoFloat), 0) FROM Tabla3 WHERE Tabla1.Folio= Tabla2.Tabla1


No recuerdo si en IB 6 se podría, pero puede probarlo...
No, no se puede...

¿alguna otra opción queda?

¿Usando un Stored Procedure?
__________________
Herr Heins Faust
Responder Con Cita
  #6  
Antiguo 18-12-2008
Avatar de RolphyReyes
RolphyReyes RolphyReyes is offline
Miembro
 
Registrado: ago 2004
Ubicación: Santo Domingo
Posts: 285
Poder: 20
RolphyReyes Va por buen camino
Smile

Saludos.

Estuve buscando en el Language Reference de Interbase 6, no encontré esta función, al parecer tendrás que realizarlo desde un Stored Procedure.

Código SQL [-]
  SELECT SUM(CampoFloat) FROM Tabla WHERE CAMPO = 1 INTO :VARIABLE;

IF (VARIABLE IS NULL) THEN
  :VARIABLE = 0;
__________________
Gracias,
Rolphy Reyes
Responder Con Cita
  #7  
Antiguo 18-12-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
tambien puedes usar la funcion iff, si existe en tu caso
(if not null then arg1 else arg2)


Código SQL [-]

select sum(campo) as suma where campo = iif(campo,campo,0);
Responder Con Cita
  #8  
Antiguo 18-12-2008
Avatar de Kipow
Kipow Kipow is offline
Miembro
 
Registrado: abr 2006
Ubicación: Guatemala
Posts: 329
Poder: 19
Kipow Va por buen camino
En vista de que no existe la funcion podrias utilizar si la condicion del valor es que sea >= 0 (positivo) la funcion ABS.

Código SQL [-]
SELECT ABS(SUM(CampoFloat)) FROM Tabla3 WHERE Tabla1.Folio= Tabla2.Tabla1)
Responder Con Cita
  #9  
Antiguo 19-12-2008
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
mira esta página http://www.udf.adhoc-data.de/documen...ng_inhalt.html
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
  #10  
Antiguo 30-12-2008
Avatar de rastafarey
rastafarey rastafarey is offline
Miembro
 
Registrado: nov 2003
Posts: 927
Poder: 21
rastafarey Va por buen camino
resp

puedes usar case
__________________
Todo se puede, que no exista la tecnología aun, es otra cosa.
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 eliminar el caracter cero a la izquierda FGarcia Varios 6 21-04-2007 01:38:14
Como hacer un ftp con componentes Indy? (desde cero) JuanErasmo Internet 7 30-10-2006 17:20:49
Cuando cero - cero es 5.755533321E-13 IVAND Firebird e Interbase 4 12-04-2006 16:06:26
select (pero un cero en vez de NULL) Osorio SQL 5 06-08-2004 22:16:15
Crystal Reports desde cero, cero, cero. Repelus Impresión 1 08-03-2004 21:23:14


La franja horaria es GMT +2. Ahora son las 01:17:28.


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