2010-01-05 4 views
6

Im cố gắng sử dụng trường hợp để thay đổi giá trị im kiểm tra trong một mệnh đề where nhưng tôi nhận được lỗi:sử dụng CASE trong T-SQL trong mệnh đề where?

sai cú pháp gần từ khóa '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) 

Trả lời

4

Bạn có thể thử

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

Dưới đây là một cách để bao gồm một tuyên bố trường hợp trong một điều khoản đó:

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

Một subquery tương quan là một khả năng:

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

Bạn có một quá nhiều dấu ngoặc mở trước khi biểu CASE.

0

Đặt nó trong mệnh đề 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) 

Ngoài ra, bạn không cần phải "SELECT" kết quả của vụ án.