2010-01-05 73 views
6

我试着去使用情况来改变值IM在where子句中检查,但我得到的错误:在where子句中在T-SQL中使用CASE?

附近关键字“案”

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) 

回答

4
不正确的语法

你可以尝试

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

这里是一个办法,包括在WHERE子句中的情况下声明:

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

相关子查询是一种可能性:

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

您有CASE表达式的前一个太多打开括号。

0

把它放在在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) 

而且,你不需要为“选择”的情况下的结果。