2010-01-05 26 views
6

Im tratando de utilizar el caso para variar el valor im comprobar en una cláusula where, pero estoy consiguiendo el error:usando CASE en T-SQL en la cláusula where?

sintaxis incorrecta cerca de la palabra clave 'caso'

SQL Server 2005

select * 
from table 
where ((CASE when adsl_order_id like '95037%' 
     then select '000000'+substring(adsl_order_id,6,6) 
     ELSE select adsl_order_id 
     END) 
     not in (select mwebID from tmp_csv_dawis_bruger0105) 

Respuesta

4

Usted podría intentar

SELECT * 
FROM table 
WHERE (SELECT CASE WHEN adsl_order_id LIKE '95037%' 
       THEN '000000' + SUBSTRING(adsl_order_id, 6, 6) 
       ELSE adsl_order_id 
       END) 
     NOT IN (select mwebID from tmp_csv_dawis_bruger0105) 
23

Aquí es una manera de incluir una declaración de caso en una cláusula WHERE:

SELECT * FROM sometable 
WHERE 1 = CASE WHEN somecondition THEN 1 
    WHEN someothercondition THEN 2 
    ELSE ... END 
1

Una consulta correlacionada es una posibilidad:

select * 
from mytable 
where not exists (
    select * 
    from 
     tmp_csv_dawis_bruger0105 
    where 
     mwebID = 
     CASE when mytable.adsl_order_id like '95037%' then '000000' + substring(mytable.adsl_order_id,6,6) 
     ELSE mytable.adsl_order_id END 
) 
-1

Tiene uno demasiados paréntesis de apertura antes de la expresión CASE.

0

ponerlo en la cláusula SELECT ...

select *, (CASE when adsl_order_id like '95037%' 
     then '000000'+substring(adsl_order_id,6,6) 
     ELSE adsl_order_id 
     END) AS Id 
from table 
where not in (select mwebID from tmp_csv_dawis_bruger0105) 

Además, no es necesario "SELECT" el resultado del caso.

Cuestiones relacionadas