Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Sql con rigth join (https://www.clubdelphi.com/foros/showthread.php?t=68386)

odrack 10-06-2010 20:00:12

Sql con rigth join
 
Saludos!

Tengo esta sentencia donde necesito buscar en 3 tablas diferentes.
Código SQL [-]
select ticket.serie, ticket.indticket, ticket.factura, ticket.fecha, totalpagar, enviado, 
sum(notacredito.total) as nc ,
ctasporcbr.importe, ctasporcbr.tipopago
from ticket 
right join notacredito on (notacredito.serie=ticket.serie and notacredito.ticket=ticket.indticket) 
right join ctasporcbr on (ctasporcbr.serie=ticket.serie and ctasporcbr.indticket=ticket.indticket)
where tautoriza="159" and ticket.fecha between '2010-06-09' and '2010-06-09' group by serie

esta buscando los datos en las 3 tablas y lo hace, el problema es cuando en algunas de las tablas (notacredito o ctasporcbr) no hay informacion, aqui se pierden algunos datos, ¿Como puedo hacer que aun que en ninguna o solo en una tabla esten los datos no se pierda?
Me refiero a que me muestre la informacion aun que solo aparesca en 2 tablas o en 1

Desde ya Gracias!!

odrack 10-06-2010 20:49:42

Hola!

Ya he logrado resolver el caso, en la segunda sentencia del join, debe ser un left y woala se resuelve, ahora el caso es que me da (NULL)

Código SQL [-]
select ticket.serie, ticket.indticket, ticket.factura, ticket.fecha, totalpagar, enviado, 
sum(notacredito.total) as nc, 
(case when ctasporcbr.importe="(NULL)" then ctasporcbr.importe="0.00" else ctasporcbr.importe end)as PagoForaneo,  
(case when ctasporcbr.tipopago="(NULL)" then ctasporcbr.tipopago="Sin Cargo" else ctasporcbr.tipopago end) as FormaPago,
(totalpagar-(sum(notacredito.total)+ctasporcbr.importe))as totalfinal
from ticket 
right join notacredito on (notacredito.serie=ticket.serie and notacredito.ticket=ticket.indticket) 
left join ctasporcbr on (ctasporcbr.serie=ticket.serie and ctasporcbr.indticket=ticket.indticket)
where tautoriza="159" and ticket.fecha between '2010-06-09' and '2010-06-09' group by serie

Saben como puedo hacer una operacion para que no me muestre el resultado como (NULL)?

Dejo la sentencia

SALUDOS!!

maeyanes 10-06-2010 21:34:10

Hola...

Tendrías que decirnos que motor de base de datos estás usando. Si es Firebird podrías usar la sentencia case.

Código SQL [-]
select 
  case
    when Campo is null then 0
  else
    Campo
  end AliasCampo
from
  Tabla


Saludos...

odrack 10-06-2010 23:42:10

Utilizo MYSQL

He puesto case cuando es (NULL) pero me regresa el mismo valor

Caro 11-06-2010 17:36:19

Hola odrack, prueba con IFNULL.

Código SQL [-]
......................................
IFNULL(ctasporcbr.importe, "0.00") as PagoForaneo,  
IFNULL(ctasporcbr.tipopago, "Sin Cargo") as FormaPago
......................................

Saluditos


La franja horaria es GMT +2. Ahora son las 01:03:58.

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