SQL - CASES ANIDADOS

 
Vista:

CASES ANIDADOS

Publicado por CARLA (1 intervención) el 02/03/2013 04:51:19
necesito crear un case anidado estoy incluyendo lo siguiente pero el sql me envía un error en el AS SUCOFICINA y luego cuando pruebo el seugno when me sale el mismo error en el AS CodtipoEvaluacion pueden decirme que est a mal?... Gracias
1
2
3
4
5
6
7
8
9
CASE WHEN  TIP.sCodTipoProducto = 'TC' AND
          ((CASE WHEN LEFT(SOL.sCodSucursalOficina,3) = '000' THEN '191' + RIGHT(SOL.sCodSucursalOficina,3)
            ELSE SOL.sCodSucursalOficina [b]
           END)AS SUCOFICINA)  <> '194059' THEN 'EVAU'
     WHEN  TIP.sCodTipoProducto = 'CC' AND
           case when SOL.idFiscalizacionSPIN  is not Null then 'EVCE'
                    else 'EVAU'
            END AS CodTipoEvaluacion
END AS EVALUAGSS
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Ella Ilona

CASES ANIDADOS

Publicado por Ella Ilona (4 intervenciones) el 02/03/2013 18:59:55
No se puede utilizar "AS nombre" dentro de "case...end"
Por favor reorganice su codigo en TRES "case...end" diferentes, aun cuando implique redundancia:

select
case ... end AS primero,
case ... end AS segundo,
case....end AS tercero,
...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

CASES ANIDADOS

Publicado por leonardo_josue (1173 intervenciones) el 05/03/2013 23:09:55
Hola Carla:

En realidad la respuesta de Ella Ilona en realidad no está anidando los CASE-WHEN, sino que los está colocando separados. Pero si tiene razón en cuanto a que el ALIAS "AS nombre" no puede ir dentro de un case, sino que se coloca hasta el final...

Ahora bien, hay que recordar que el CASE-WHEN tiene dos formas para usarse, y creo que tu estás mezclandolas:

1
CASE WHEN condición THEN algo ELSE otra_cosa END



o

1
2
3
4
5
6
CASE campo
  WHEN valor1 THEN
  WHEN valor2 THEN
   ...
  WHEN valornTHEN
END


En términos de programación el primero se comporta como el típico IF mientras que el segundo como el SWITH de Java. Para tu caso, después de analizar un poco y tratando de adivinar qué es lo que estás tratando de hacer, creo que sería más o menos así:

1
2
3
4
5
6
7
8
9
10
11
CASE TIP.sCodTipoProducto
     WHEN  'TC' AND
           CASE WHEN LEFT(SOL.sCodSucursalOficina,3) = '000'
                THEN '191' + RIGHT(SOL.sCodSucursalOficina,3)
                ELSE SOL.sCodSucursalOficina [b]
           END  <> '194059'
     THEN 'EVAU'
     WHEN  'CC' AND SOL.idFiscalizacionSPIN  IS NOT NULL
     THEN 'EVCE'
     ELSE 'EVAU'
END AS EVALUAGSS


Creo que el segundo CASE-WHEN que querías anidar en realidad no sirve para nada y se podría hacer simplemente en la condición.

Dale un vistazo para ver si es lo que necesitas:

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

CAse ANIDADOS

Publicado por oscar vasquez (1 intervención) el 24/08/2016 21:00:08
con este case when anidado podrias ver en una sola columna diferentes valores
espero les sea de utilidad

1
2
3
4
5
6
7
8
9
10
select
CASE WHEN campo = 'P' THEN 'PENDIENTES'
ELSE
  CASE WHEN campo = 'D' THEN 'DENEGADA'
  ELSE
     CASE WHEN campo = 'C' THEN 'PROCESADA'
	 END
	  END
	   END AS ESTADO
from tabla
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar