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

Explicacion decode en query Oracle

Estas en el tema de Explicacion decode en query Oracle en el foro de Oracle en Foros del Web. Saludos soy nuevo en oracle, estuve revisando el query con el que hacian un reporte en oracle reports 6i, bueno casi entendi todo, pero me ...
  #1 (permalink)  
Antiguo 30/07/2010, 13:11
 
Fecha de Ingreso: julio-2008
Mensajes: 8
Antigüedad: 15 años, 9 meses
Puntos: 0
Busqueda Explicacion decode en query Oracle

Saludos soy nuevo en oracle, estuve revisando el query con el que hacian un reporte en oracle reports 6i, bueno casi entendi todo, pero me quedan dudas en una sentencia del reporte que es la siguiente:

Decode(Sign(Nvl(saldo_actual,0)-nvl(saldo_anterior,0))),-1,(Nvl(saldo_actual,0)-nvl(saldo_anterior,0)),0) disminucion

Con esta sentencia lo que se quiere lograr es por ejemplo:
Select decode(sign(edad-25),-1,'Menores','mayores')

En este caso mio (lo que esta en negrita), Hace la resta de los saldos actual y anterior, y si es negativo pone la resta del saldo actual - el saldo anterior, caso contrario pone 0, segun entendi

Como resumen, lo que no comprendo es el -1 en la sentencia del decode, que hace, supongo que es para darle el signo negativo.

O en la otra sentencia mas sencilla, lo que se queria hacer era:

select iif(edad>20,'mayores de 20','menor de 20') as rango_edad
from personas;

y con el decode es asi: Select decode(sign(edad-25),-1,'Menores','mayores')
pero no comprendo el -1 bien, podrian explicarme

Gracias por su atencion
  #2 (permalink)  
Antiguo 30/07/2010, 13:26
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: Explicacion decode en query Oracle

Mirate este ejemplo
http://www.techonthenet.com/oracle/functions/decode.php

Abajo de la sentencia con decode, muestran en terminos de programación cual sería el equivalente.

En este caso, la función sign retorna un -1 si el parámetro de entrada es un numero negativo. por eso, si la resta da negativo, sign retorna un -1 que es comparado por el decode y pone en el campo lo que se requiere.

Para tu ejemplo:
Código SQL:
Ver original
  1. SQL> SELECT DECODE(SIGN(30-25),-1,'MENORES','MAYORES') FROM DUAL;
  2.  
  3. DECODE(
  4. -------
  5. MAYORES
  6.  
  7. SQL>  SELECT DECODE(SIGN(20-25),-1,'MENORES','MAYORES') FROM DUAL;
  8.  
  9. DECODE(
  10. -------
  11. MENORES

En el primer caso, como 30 - 25 es un numero positivo, el retorno es 1 (No -1) y se va para el "ELSE" que es mayores.

En el otro caso, como el retorno de sign es -1, pone menores y en palabras de programación, entraría por el IF.

se entiende?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming

Etiquetas: query
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 15:15.