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

decode sql

Estas en el tema de decode sql en el foro de Oracle en Foros del Web. necesito una consulta que me devuelva un valor cero si la fecha de la tabla es menor que la fecha que el paso como parametro, ...
  #1 (permalink)  
Antiguo 20/06/2012, 09:13
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 17 años, 3 meses
Puntos: 8
decode sql

necesito una consulta que me devuelva un valor cero si la fecha de la tabla es menor que la fecha que el paso como parametro, esta ultima es una constante.

Ademas la tabla tiene un campo llamado estado, si este estado == 40 y la fecha es menor a la fecha pasada como parametro, la consulta debe devolver tambien campo+valor_residual.

la estructura de la tabla es operacion, fecha_valor_res, capital_impagado, valor_residual y estado.

la select debe devolver operacion, fecha_valor_res,valor_residual, capital_impagado.

Si la fecha_valor_res es menor a una fecha el valor devuelto en valor_residual es 0, sino el que este en tablas, esto supongo que se puede hacer con un decode.

Mi duda es mas en el campo capital_impagado que hay que sumarle el valor_residual si el estado es el 40 y la fecha_valor_res < a la fecha que se le pasa como parametro.

Muchas gracias por las molestias.
  #2 (permalink)  
Antiguo 20/06/2012, 11:14
Avatar de khristian_696  
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 16 años, 4 meses
Puntos: 4
Respuesta: decode sql

Hola Erick,
En este caso es más conveniente utilizar el CASE, tu consulta se vería algo así
Código:
SELECT OPERACION
            ,FECHA_VALOR_RES
            ,CASE WHEN TO_DATE(TO_CHAR(FECHA_VALOR_RES,'DD/MM/RRRR'))<TO_DATE(vFECHA_PARAMETRO,'DD/MM/RRRR') THEN 0 ELSE VALOR_RESIDUAL  END AS VALOR_RESIDUAL
           ,CASE WHEN TO_DATE(TO_CHAR(FECHA_VALOR_RES,'DD/MM/RRRR'))<TO_DATE(vFECHA_PARAMETRO,'DD/MM/RRRR')  AND ESTADO=40 THEN CAPITAL_IMPAGADO + VALOR_RESIDUAL ELSE CAPITAL_IMPAGADO END AS CAPITAL_IMPAGADO
FROM "TU_TABLA";
Prueba con este query y nos avisas.
Saludos
  #3 (permalink)  
Antiguo 20/06/2012, 13:03
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 17 años, 3 meses
Puntos: 8
Respuesta: decode sql

Cita:
Iniciado por khristian_696 Ver Mensaje
Hola Erick,
En este caso es más conveniente utilizar el CASE, tu consulta se vería algo así
Código:
SELECT OPERACION
            ,FECHA_VALOR_RES
            ,CASE WHEN TO_DATE(TO_CHAR(FECHA_VALOR_RES,'DD/MM/RRRR'))<TO_DATE(vFECHA_PARAMETRO,'DD/MM/RRRR') THEN 0 ELSE VALOR_RESIDUAL  END AS VALOR_RESIDUAL
           ,CASE WHEN TO_DATE(TO_CHAR(FECHA_VALOR_RES,'DD/MM/RRRR'))<TO_DATE(vFECHA_PARAMETRO,'DD/MM/RRRR')  AND ESTADO=40 THEN CAPITAL_IMPAGADO + VALOR_RESIDUAL ELSE CAPITAL_IMPAGADO END AS CAPITAL_IMPAGADO
FROM "TU_TABLA";
Prueba con este query y nos avisas.
Saludos
gracias por la respuesta, lo probare. No conocia el case.
  #4 (permalink)  
Antiguo 20/06/2012, 13:13
Avatar de khristian_696  
Fecha de Ingreso: agosto-2008
Mensajes: 27
Antigüedad: 16 años, 4 meses
Puntos: 4
Respuesta: decode sql

Ok, esperamos tu comentario al respecto para saber si pudiste solucionar el tema!!!
  #5 (permalink)  
Antiguo 21/06/2012, 01:19
 
Fecha de Ingreso: septiembre-2007
Mensajes: 268
Antigüedad: 17 años, 3 meses
Puntos: 8
Respuesta: decode sql

Funciona a la perfeccion

CASE WHEN TO_DATE(operaciones.FECHA_VALOR_RES,'YYYYMMDD')<=T O_DATE('20120531','YYYYMMDD') THEN 0 ELSE operaciones.VALOR_RESIDUAL_EU END AS VALOR_RESIDUAL_EU
,CASE WHEN TO_DATE(operaciones.FECHA_VALOR_RES,'YYYYMMDD')<=T O_DATE('20120531','YYYYMMDD') AND operaciones.ESTADO=40 THEN operaciones.CAPITAL_IMPAGADO + operaciones.VALOR_RESIDUAL_EU ELSE operaciones.CAPITAL_IMPAGADO END AS CAPITAL_IMPAGADO.

Esto no es una query sobre una tabla sino sobre una subconsulta y las fechas las devuelve como cadenas de texto en formato YYYYMMDD, creo que la tranformacion a date sobra y se puede comparar directamente las dos cadenas de texto.

Un saludo y muchas gracias.

Etiquetas: decode, select, sql, tabla, campos
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 11:26.