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 21-05-2020
aqueron2000 aqueron2000 is offline
Registrado
 
Registrado: abr 2006
Posts: 6
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.
Responder Con Cita
  #2  
Antiguo 21-05-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Usa coalesce también.
Aunque lo ideal es no tener campos con valores nulos, "not null default 0"
Responder Con Cita
  #3  
Antiguo 21-05-2020
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.273
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.
Responder Con Cita
  #4  
Antiguo 21-05-2020
aqueron2000 aqueron2000 is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
aqueron2000 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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.
Responder Con Cita
  #5  
Antiguo 21-05-2020
aqueron2000 aqueron2000 is offline
Registrado
 
Registrado: abr 2006
Posts: 6
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.
Responder Con Cita
  #6  
Antiguo 21-05-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por aqueron2000 Ver Mensaje
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.
Responder Con Cita
  #7  
Antiguo 21-05-2020
aqueron2000 aqueron2000 is offline
Registrado
 
Registrado: abr 2006
Posts: 6
Poder: 0
aqueron2000 Va por buen camino
Cita:
Empezado por Casimiro Notevi Ver Mensaje
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

Última edición por Casimiro Notevi fecha: 21-05-2020 a las 12:43:56.
Responder Con Cita
  #8  
Antiguo 21-05-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cierto, has dicho que no hay null, lo había olvidado.
Responder Con Cita
  #9  
Antiguo 21-05-2020
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.039
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Creo que lo mejor es que hagas un procedimiento almacenado que devuelva cero en caso de nulo.
Responder Con Cita
  #10  
Antiguo 21-05-2020
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.556
Poder: 25
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
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
Consulta SQL devuelve registros duplicados Malau SQL 5 26-05-2011 02:47:50
Realizar una consulta sobre los registros que devuelve otra consulta Borjaserrano Firebird e Interbase 12 01-10-2007 23:19:44
Consulta con TIMESTAMP no devuelve nada subzero Firebird e Interbase 10 12-09-2007 04:51:06
Saber si una consulta no devuelve datos rafita SQL 4 18-09-2006 10:00:26
Limitar los registros que devuelve una consulta roman Conexión con bases de datos 1 03-09-2004 09:08:45


La franja horaria es GMT +2. Ahora son las 11:38:38.


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