Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Que una consulta me regrese cero en lugar de null (https://www.clubdelphi.com/foros/showthread.php?t=67205)

darkerbyte 05-04-2010 19:53:59

Que una consulta me regrese cero en lugar de null
 
Hola mis amigos, estoy trabado aqui con una consulta y ya le estuve investigando y no le encuentro.

Yo necesito mostrar el resultado de la siguiente consulta:

Código SQL [-]
select idCredito, fecha, hora, vence, idCliente, clientes.nombre, idVendedor, vendedores.nombre as nombrevendedor,
 (select sum(cantidad*p_venta) from detallecreditos where detallecreditos.idCredito = creditos.idCredito) as importe,
 acuenta, 
 (select sum(monto) from abonos where abonos.idCredito = creditos.idCredito) as abonos, 
 (select sum(cantidad*p_venta) from detallecreditos where detallecreditos.idCredito = creditos.idCredito)- 
                 (select sum(monto) from abonos where abonos.idCredito = creditos.idCredito)  - acuenta as saldo,  
if (pagado,'Si', 'No' ) as Liquidada

from creditos join clientes on idCliente=id_cliente
join vendedores on idVendedor=id_vendedor
order by idCredito

En la, tengo cual como podrán apreciar 3 tablas:
Creditos, que es la tabla que me guarda los datos de las ventas a crédito (no. de venta, el cliente, el cajero, la fecha, pago a cuenta y vencimiento)
detalleCreditos que contiene los articulos vendidos en la venta a credito correspondiente (idCredito, idProducto, cantidad, precio de compra, precio de venta)
y Abonos que me registra los pagos que el cliente va haciendo a la nota de crédto (idcliente, idcredito, fecha, monto)

Ahora el problema es que cuando realizo la consulta si el cliente no tiene abonos me arroja valor nulo en el saldol. Esto se puede solucionar si en la consulta en lugar de que me arroje un null me arroje un cero cuando no tiene abonos. Ahi esta el detalle, como le hago para que me arroje un cero.

Aqui pongo la captura del resultado de la consulta



Desde ya, muchas gracias por su ayuda.

Casimiro Notevi 05-04-2010 19:59:56

No sé qué base de datos usas, pero echa un vistazo a "coalesce"

Edito: http://www.firebirdsql.org/pdfmanual...n-Firebird.pdf

darkerbyte 05-04-2010 20:03:31

Perdón...
 
Mil disculpas, olvidé semenjante detalle:

Uso MySQL 5.2.33
y adicionalmente Delphi 7 y ZeosLib 6.6

Un saludo.

Casimiro Notevi 05-04-2010 20:10:39

Echa un vistazo a los enlaces del final de esta página, abajo del todo, ahí encontrarás lo que buscas, es que no sé qué comando es en mysql.

darkerbyte 05-04-2010 20:13:41

De hecho
 
Gracias Casimiro por el tip, de hecho ya revise la mayoría de los hilos referentes pero no encuentro algo util.
Sigo buscando.

:(

Casimiro Notevi 05-04-2010 20:35:04

¿Puede ser así en mysql?, creo que es igual que en firebird

SELECT COALESCE(NULL,0);

Casimiro Notevi 05-04-2010 20:37:15

Ya lo encontré buscando en clubdelphi: NVL(<campo de la tabla>, <valor por defecto>)

O sea:
nvl(carga, 0)

darkerbyte 05-04-2010 21:02:01

ya jaló
 
Hola de nuevo Casimiro

Gracias por el tip, de hecho buscándole encontré una funcion similar, ya resolví el asunto y aquí les dejo como hice la consulta por si a alguien le pueda servir en el futuro.

Código SQL [-]
select idCredito, fecha, hora, vence, idCliente, clientes.nombre, idVendedor, vendedores.nombre as nombrevendedor,
(select sum(cantidad*p_venta) from detallecreditos where detallecreditos.idCredito = creditos.idCredito) as importe, acuenta, 
(select IFNULL(sum(monto),0) from abonos where abonos.idCredito = creditos.idCredito) as abonos, 
(select sum(cantidad*p_venta) from detallecreditos where detallecreditos.idCredito = creditos.idCredito)- 
  (select IFNULL(sum(monto),0) from abonos where abonos.idCredito = creditos.idCredito)  - acuenta as saldo,  
if (pagado,'Si', 'No' ) as Liquidada
from creditos join clientes on idCliente=id_cliente
join vendedores on idVendedor=id_vendedor
order by idCredito

Checar la parte de IFNULL...

darkerbyte 05-04-2010 21:29:54

Simplificada
 
Jaja, no dejo de aprender cosas nuevas, un amigo en enseño como simplificar las consultas:

Código SQL [-]

select
 idCredito, fecha, hora, vence, idCliente, nombre, idVendedor, 
 nombrevendedor, importe, acuenta, abonos, importe-acuenta-abonos as saldo

from (
  select idCredito, fecha, hora, vence, idCliente, clientes.nombre, idVendedor, vendedores.nombre as nombrevendedor,
(select sum(cantidad*p_venta) from detallecreditos where detallecreditos.idCredito = creditos.idCredito) as importe, acuenta, 
(select IFNULL(sum(monto),0) from abonos where abonos.idCredito = creditos.idCredito) as abonos, 
if (pagado,'Si', 'No' ) as Liquidada
from creditos join clientes on idCliente=id_cliente
join vendedores on idVendedor=id_vendedor) as datos


La franja horaria es GMT +2. Ahora son las 04:50:17.

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