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

Problema con decode y nvl

Estas en el tema de Problema con decode y nvl en el foro de Oracle en Foros del Web. Tengo un problema en la select: SELECT organismos.ID_ENTIDAD ValueField, organismos.CODIGO, organismos.NOMBRE TextField, paises.NOMBRE PAIS, provincias.NOMBRE PROVINCIA, organismos.DIRECCION, DECODE(nvl(organismos.TODOS,''F''),''F'' , DECODE(organismos.SEDE, ''T'', DECODE(centro.NOMBRE, '', DECODE(organismos.CPC,''T'',''CPC''),''SEDE''),cen tro.NOMBRE),''TODOS'') ...
  #1 (permalink)  
Antiguo 05/12/2011, 02:31
 
Fecha de Ingreso: abril-2010
Mensajes: 50
Antigüedad: 14 años
Puntos: 2
Problema con decode y nvl

Tengo un problema en la select:

SELECT
organismos.ID_ENTIDAD ValueField,
organismos.CODIGO,
organismos.NOMBRE TextField,
paises.NOMBRE PAIS,
provincias.NOMBRE PROVINCIA,
organismos.DIRECCION,
DECODE(nvl(organismos.TODOS,''F''),''F'' ,
DECODE(organismos.SEDE, ''T'',
DECODE(centro.NOMBRE, '',
DECODE(organismos.CPC,''T'',''CPC''),''SEDE''),cen tro.NOMBRE),''TODOS'') Lugar
-> Quiero que si en el campo todos sale una T, que ponga "TODOS" en el resultado de esa columna, sino si en sede sale una T, que ponga "SEDE", sino si el campo centro.nombre no está vacío que muestre el nombre, sino que compruebe que hay una T en organismos.CPC y si la hay, que en el resultado de esa columna ponga "CPC". T = true, F = false


FROM TB_ORG_EMPRESAS_ORGANISMOS organismos left outer join TB_ORG_PAISES paises on organismos.ID_PAIS = paises.ID_PAIS
LEFT OUTER JOIN TB_GME_CM centro on organismos.ID_CENTRO = centro.ID_CENTRO
LEFT OUTER JOIN TB_ORG_PROVINCIAS provincias ON organismos.ID_PROVINCIA = provincias.ID_PROVINCIA
WHERE organismos.TIPO_ENTIDAD = ''T'' ';

¿Qué estoy haciendo mal?. Soy nuevo en Oracle, y mezclar estas dos funciones (Decode y nvl) me está dando problemas. Muchas gracias de antemano.
  #2 (permalink)  
Antiguo 05/12/2011, 18:57
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: Problema con decode y nvl

Que versión de oracle usas?
Si es superior a 9 (creo) puedes usar la sentencia case. Es mucho mas limpia y entendible.

Ahora bien, no mencionas el problema que tienes. Como te bota la consulta?

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #3 (permalink)  
Antiguo 07/12/2011, 03:05
 
Fecha de Ingreso: abril-2010
Mensajes: 50
Antigüedad: 14 años
Puntos: 2
Respuesta: Problema con decode y nvl

Utilizo la versión 9.

Pues me pone de error: "falta el paréntesis derecho" en esta línea: DECODE(nvl(organismos.TODOS,''F''),''F'' ,

El caso es que he probado a poner y quitar paréntesis como un loco, no estoy utilizando bien el decode, porque la consulta la he hecho solo con nvl y funciona.
Aunque no haga lo que yo quiero, que no es más que si en el campo todos sale una T, que ponga "TODOS" en el resultado de esa columna, sino si en sede sale una T, que ponga "SEDE", sino si el campo centro.nombre no está vacío que muestre el nombre, sino que compruebe que hay una T en organismos.CPC y si la hay, que en el resultado de esa columna ponga "CPC". T = true, F = false.

Cómo se utilizaría la sentencia Case(si es que se pudiera utilizar para la versión 9 de Oracle) en este caso? Gracias.
  #4 (permalink)  
Antiguo 07/12/2011, 06:03
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: Problema con decode y nvl

un ejemplo
http://www.techonthenet.com/oracle/functions/case.php

esta sentencia es mucho mas limpia.

Como consejo para consultas complejas y evitar problemas de parentesis y signos te recomiedo tabular las consultas.

Código SQL:
Ver original
  1. SELECT
  2.       campo1,
  3.       DECODE(campo2,
  4.                      'valor1','valor',
  5.                      'valor3','calor4'
  6.                     )
  7. FROM tabla
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #5 (permalink)  
Antiguo 09/01/2012, 02:11
 
Fecha de Ingreso: abril-2010
Mensajes: 50
Antigüedad: 14 años
Puntos: 2
Respuesta: Problema con decode y nvl

Era un problema con los parentesis, gracias por las respuestas.

Etiquetas: decode, nvl, select
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 14:13.