2011-11-11 18 views
5

siguiente consulta de Oracle cumple y funciona bien:Caso en Oracle cláusula WHERE

SELECT Employee.EmployeeId, 
    Employee.EmployeeName, 
    Employee.Description , 
    Employee.IsFrozen 
FROM employee, employeerole, roledef 
where employee.employeeid = employeerole.employeeid 
and employeerole.roleid = roledef.roleid 
and rolename IN 
(case 
when (1 < 2) THEN ('Owner Role') 
when (2 < 1) THEN ('Eval Owner Role') 
END); 

Ahora, en mi caso me gustaría añadir en el segundo cuando es decir, (2 < 1) dos nombre de rol ('propietario de la función' y " Eval Owner Role '). Sugiera amablemente cómo cambiará la consulta anterior.

Gracias de antemano.

-Justin Samuel

+2

'2 <1' siempre es falso. ¿Qué estás intentando hacer? –

+0

Lo sé ... solo estoy compilando la consulta. O bien, permite revertir el caso when. Solo me refería a compilar .... –

Respuesta

10

Por qué utilizar un CASE? ¿Por qué no simplemente

AND ( ((1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role')) 
    OR ((2 < 1) and rolename IN ('Eval Owner Role'))) 

Estoy suponiendo que en realidad no tiene predicados que están codificadas para evaluar a TRUE (1 < 2) o falso (2 < 1) y que quienes son en realidad se unen en las variables tu código real

Si realmente desea utilizar una declaración CASE, podría codificar

AND(CASE WHEN (1 < 2) and rolename IN ('Owner Role', 'Eval Owner Role') 
      THEN 1 
      WHEN (2 < 1) and rolename IN ('Eval Owner Role') 
      THEN 1 
      ELSE 0 
     END) = 1 

pero que va a ser mucho más difícil que el optimizador para tratar y mucho menos claro para el desarrollador que tiene que mantener eso.

+0

Esto resolvió el problema. Gracias Justin por esto! –

+0

Sin embargo, como "ypercube" sugirió que estaba buscando algo usando la instrucción CASE. Pero no pudo resolver el problema usando CASE. ¡Pero esta definitivamente es otra forma de lograr lo mismo! :) –

+0

@Justin - Actualicé la respuesta con un ejemplo que usa una declaración 'CASE'. Pero como menciono, generalmente no es una buena idea codificarlo de esa manera. –