Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   NULL's como cero en SELECT (https://www.clubdelphi.com/foros/showthread.php?t=62369)

Faust 18-12-2008 19:19:29

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.

jhonny 18-12-2008 19:43:38

Si estan usando FB 1.5 o superior, pueden hacer uso de la función coalesce. ;)

Faust 18-12-2008 19:52:46

Cita:

Empezado por jhonny (Mensaje 331478)
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

TOPX 18-12-2008 20:22:35

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...

Faust 18-12-2008 20:28:55

Cita:

Empezado por TOPX (Mensaje 331492)
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?

RolphyReyes 18-12-2008 21:21:30

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;

coso 18-12-2008 21:53:58

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);

Kipow 18-12-2008 22:40:37

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)

PepeLolo 19-12-2008 01:53:10

mira esta página http://www.udf.adhoc-data.de/documen...ng_inhalt.html

rastafarey 30-12-2008 22:11:17

resp
 
puedes usar case


La franja horaria es GMT +2. Ahora son las 18:26:57.

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