Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

reemplazar Case When por NVL ??

Estas en el tema de reemplazar Case When por NVL ?? en el foro de Oracle en Foros del Web. hola a todos, estoy tratando de modificar una linea de codigo con CASE WHEN por usar NVL para que mi query sea mas eficiente. el ...
  #1 (permalink)  
Antiguo 18/02/2015, 13:23
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Pregunta reemplazar Case When por NVL ??

hola a todos, estoy tratando de modificar una linea de codigo con CASE WHEN por usar NVL para que mi query sea mas eficiente. el problema es que no logro dar con la solucion correcta;
Código SQL:
Ver original
  1. SUM((inv_total_l - total_paid_l - cr_note_tot_l) *
  2.   (CASE WHEN (sysdate - m560.due_date) >= to_number(m002.odue_categx2) AND (sysdate - m560.due_date) < to_number(m002.odue_categx3) THEN 1 ELSE 0 END)) odue_3,

mi idea es sustituir el case when por la funcion NVL, pero no me resulta, me tira error. la forma que lo hago es la siguiente:

Código SQL:
Ver original
  1. SUM((inv_total_l - total_paid_l - cr_note_tot_l) *
  2.   NVL ((sysdate - m560.due_date) >= to_number(m002.odue_categx2) AND (sysdate - m560.due_date) < to_number(m002.odue_categx3) , 0 )) odue_3,

Pero nada, alguna idea del porque no me funciona?, como debiera hacerlo?
desde ya muchas gracias,
saludos!

Última edición por ras_chalo; 18/02/2015 a las 13:42
  #2 (permalink)  
Antiguo 18/02/2015, 14:10
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: reemplazar Case When por NVL ??

NVL indica null value.

Y cuenta con 2 parametros: NVL(Campo_a_Mostrar,'En caso de que sea null que quiero mostrar')

Si quieres validar, igual tendrías que hacer uso del CASE dentro del NVL
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 18/02/2015, 14:17
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Pregunta Respuesta: reemplazar Case When por NVL ??

Cita:
Iniciado por huesos52 Ver Mensaje
NVL indica null value.

Y cuenta con 2 parametros: NVL(Campo_a_Mostrar,'En caso de que sea null que quiero mostrar')

Si quieres validar, igual tendrías que hacer uso del CASE dentro del NVL
y no existe la posibilidad de agregarle una logica en el Campo_a_Mostrar?, algo como lo quiero hacer?, o solo debe ser un campo a secas?
  #4 (permalink)  
Antiguo 18/02/2015, 14:19
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: reemplazar Case When por NVL ??

Si se puede. Pero en ultimas lo tendrías que hacer con un CASE o con un DECODE que es como actualmente lo tienes.
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 18/02/2015, 14:24
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: reemplazar Case When por NVL ??

Cita:
Iniciado por huesos52 Ver Mensaje
Si se puede. Pero en ultimas lo tendrías que hacer con un CASE o con un DECODE que es como actualmente lo tienes.
amigo disculpa la patudes, pero sabes que estoy re mareado con esto, me puedes mostrar por favor un ejemplo de como podria hacerlo?
  #6 (permalink)  
Antiguo 18/02/2015, 14:30
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: reemplazar Case When por NVL ??

Antes que nada, cuentanos realmente que quieres hacer.

Lo que tienes en tu primer post funciona?
Código SQL:
Ver original
  1. SUM((inv_total_l - total_paid_l - cr_note_tot_l) *
  2.   (CASE WHEN (sysdate - m560.due_date) >= to_number(m002.odue_categx2) AND (sysdate - m560.due_date) < to_number(m002.odue_categx3) THEN 1 ELSE 0 END)) odue_3,

Entiendo que es la multiplicación de la suma de una multiplicación de campos interna con un 1 o un 0 que es producto de una validación que realizas con CASE.

Yo con lo pco que veo, no entiendo como con NVL puedes mejorar la consulta ni en que aspecto tendría un impacto en lo que ya tienes
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #7 (permalink)  
Antiguo 18/02/2015, 14:38
Avatar de ras_chalo  
Fecha de Ingreso: junio-2010
Mensajes: 369
Antigüedad: 13 años, 10 meses
Puntos: 6
Respuesta: reemplazar Case When por NVL ??

Cita:
Iniciado por huesos52 Ver Mensaje
Antes que nada, cuentanos realmente que quieres hacer.

Lo que tienes en tu primer post funciona?
Código SQL:
Ver original
  1. SUM((inv_total_l - total_paid_l - cr_note_tot_l) *
  2.   (CASE WHEN (sysdate - m560.due_date) >= to_number(m002.odue_categx2) AND (sysdate - m560.due_date) < to_number(m002.odue_categx3) THEN 1 ELSE 0 END)) odue_3,

Entiendo que es la multiplicación de la suma de una multiplicación de campos interna con un 1 o un 0 que es producto de una validación que realizas con CASE.

Yo con lo pco que veo, no entiendo como con NVL puedes mejorar la consulta ni en que aspecto tendría un impacto en lo que ya tienes
sabes que tienes razon, lo dejo tal cual no mas si total funciona, solo que queria hacerlo un pco mas eficiente

en fin muchas gracias por tu tiempo, ya que sin tu ayuda aun estaria tratando de meterle el NVL, saludos!!

Etiquetas: case, log, reemplazar
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:46.