2010-01-05 7 views
6

Im Versuch Fall zu verwenden, um den Wert im Überprüfung in einer where-Klausel zu ändern, aber ich bin immer die Fehlermeldung:Verwendung von CASE in T-SQL in der Where-Klausel?

falsche Syntax nahe dem Schlüsselwort '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) 

Antwort

4

Sie könnten

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

versuchen Hier ist eine Möglichkeit, eine Case-Anweisung in einer Where-Klausel enthalten:

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

Eine korrelierte Unterabfrage ist eine Möglichkeit:

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

Sie haben eine zu viel Öffnen Klammern vor dem CASE-Ausdruck.

0

es in der SELECT-Klausel Put ...

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) 

Auch brauchen Sie nicht der Fall ist das Ergebnis zu "SELECT".

Verwandte Themen