using CASE in T-SQL in the where clause?

68,422

Solution 1

Here is one way to include a case statement in a Where clause:

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

Solution 2

You could try

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)

Solution 3

A correlated subquery is one possibility:

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
 )
Share:
68,422
Admin
Author by

Admin

Updated on July 05, 2022

Comments

  • Admin
    Admin almost 2 years

    Im trying to use case to vary the value im checking in a where clause but I'm getting the error:

    incorrect syntax near the keyword '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)