Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Go Back   Foros Club Delphi > Bases de datos > Firebird e Interbase
Register FAQ Members List Calendar Guía de estilo Search Today's Posts Mark Forums Read

Reply
 
Thread Tools Search this Thread Display Modes
  #1  
Old 21/05/2020
aqueron2000 aqueron2000 is offline
Registrado
 
Join Date: Apr 2006
Posts: 8
Poder: 0
aqueron2000 Va por buen camino
Consulta devuelve null

Buenos dias.

Tengo la siguiente consulta con la que quiero obtener el ultimo precio de compra UPC y el ultimo precio de venta UPV y el margen a ultimo precio, que sera la resta del UPV - UPC.
La consulta funciona perfectamente, el problema es que si no ha habido ninguna compra me devuelve null, en UPC y UPV, cuando lo que quiero es que me devuelva 0 en UPC y en UPV el precio y no NULL como hace, aunque si que tiene movimiento.

pongo aqui la consulta SQL.

Estoy usando firebird 2.5

Código SQL [-]
  select coalesce(ult_precio_compra, 0) as Ult_Precio_Compra , Ult_Precio_venta , Ult_Precio_venta - ult_precio_compra as Margen_Ult_precio
  from (select first 1 cast(coalesce(apl.precio_neto_regalo_dtocabe,0) as numeric(18,4) ) as ult_precio_compra from albaprovelineas apl
    join albaprovecabe apc on apl.albaprovecabe_id = apc.albaprovecabe_id
    where apc.estado > 9 and apl.precio_neto_regalo_dtocabe > 0
    and apl.articulo_id = :xarticulo
    order by apc.fecha_albaran desc )
,
( select first 1 li.precio_neto as Ult_Precio_venta from lineaalbaclie li
    join cabealbaclie ca on ca.cabealbaclie_id = li.cabealbaclie_id
    where ca.estado > 9 and li.precio_neto > 0
    and li.articulo_id = :xarticulo
    order by ca.fechaalbaran desc )

Gracias y un saludo.
Reply With Quote
  #2  
Old 21/05/2020
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Usa coalesce también.
Aunque lo ideal es no tener campos con valores nulos, "not null default 0"
Reply With Quote
  #3  
Old 21/05/2020
Neftali [Germán.Estévez]'s Avatar
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Join Date: Jul 2004
Location: Barcelona - España
Posts: 19,449
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Si la consulta la haces sobre albaprovelineas y si esta tabla no tiene lineas no te devolverá ningun registro, por lo tanto obtienes valores NULOS en todos los campos. Me imagino que eso es lo que te está pasando.
Tal vez deberías utilizar un CASE, para determinar cuando hay o no registros en la tabla de compras y hacer algo diferente.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Reply With Quote
  #4  
Old 21/05/2020
aqueron2000 aqueron2000 is offline
Registrado
 
Join Date: Apr 2006
Posts: 8
Poder: 0
aqueron2000 Va por buen camino
Quote:
Originally Posted by Casimiro Notevi View Post
Usa coalesce también.
Aunque lo ideal es no tener campos con valores nulos, "not null default 0"
Hola Casimiro, gracias por responder.

Todos los campos numéricos están como not null y default 0, por lo que no hay ningún campo numérico a null.

El problema es que la primera sentencia, la del UPC, no devuelve ningún resultado, pues no hay ninguna compra de este producto, y me devuelve toda la sentencia a null.
Me gustaría saber si tiene arreglo con este tipo de consulta, y no buscar otra solución, como hacerlo en un procedimiento almacenado, p.e.

Gracias.
Reply With Quote
  #5  
Old 21/05/2020
aqueron2000 aqueron2000 is offline
Registrado
 
Join Date: Apr 2006
Posts: 8
Poder: 0
aqueron2000 Va por buen camino
Hola Neftali.
Si, era por ver, si había alguna solución, que se me había pasado, en este caso utilizar el CASE para ver si la compra tiene movimientos, lo veo lioso para después darle mantenimiento, prefiero un Procedimento o un Execute block.

Gracias y un saludo.
Reply With Quote
  #6  
Old 21/05/2020
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Quote:
Originally Posted by aqueron2000 View Post
Todos los campos numéricos están como not null y default 0, por lo que no hay ningún campo numérico a null.
El problema es que la primera sentencia, la del UPC, no devuelve ningún resultado, pues no hay ninguna compra de este producto, y me devuelve toda la sentencia a null.
Con coalesce(loquesea,0) tiene que devolver 0 si no hay valores.
Reply With Quote
  #7  
Old 21/05/2020
aqueron2000 aqueron2000 is offline
Registrado
 
Join Date: Apr 2006
Posts: 8
Poder: 0
aqueron2000 Va por buen camino
Quote:
Originally Posted by Casimiro Notevi View Post
Con coalesce(loquesea,0) tiene que devolver 0 si no hay valores.
Pues
Código SQL [-]
select articulo_id
from articulos where articulo_id = 978798878
devuelve null. ( articulo_id = 978798878 no existe )
Código Delphi [-]
select coalesce(articulo_id, 0)
from articulos where articulo_id = 978798878
También devuelve null

Last edited by Casimiro Noteví : 21/05/2020 at 12:43.
Reply With Quote
  #8  
Old 21/05/2020
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Cierto, has dicho que no hay null, lo había olvidado.
Reply With Quote
  #9  
Old 21/05/2020
Casimiro Noteví's Avatar
Casimiro Noteví Casimiro Noteví is offline
Merodeador
 
Join Date: Sep 2004
Location: En algún lugar.
Posts: 32,682
Poder: 10
Casimiro Noteví Tiene un aura espectacularCasimiro Noteví Tiene un aura espectacular
Creo que lo mejor es que hagas un procedimiento almacenado que devuelva cero en caso de nulo.
Reply With Quote
  #10  
Old 21/05/2020
[egostar] egostar is offline
Registrado
 
Join Date: Feb 2006
Posts: 6,572
Poder: 27
egostar Va camino a la fama
Hola

O se podría hacer algo "menos complejo"...

Código Delphi [-]
If not Query.isEmpty then
  //Pasar valores recuperados
else
  //Asignar valores en 0

Saludos
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Reply With Quote
Reply


Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
Consulta SQL devuelve registros duplicados Malau SQL 5 26/05/2011 02:47
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01/10/2007 23:19
Consulta con TIMESTAMP no devuelve nada subzero Firebird e Interbase 10 12/09/2007 04:51
Saber si una consulta no devuelve datos rafita SQL 4 18/09/2006 10:00
Limitar los registros que devuelve una consulta roman Conexión con bases de datos 1 03/09/2004 09:08


All times are GMT +2. The time now is 10:08.


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