использование CASE в T-SQL в предложении where? - PullRequest
13 голосов
/ 05 января 2010

Я пытаюсь использовать case, чтобы изменить значение, которое я проверяю в предложении where, но я получаю сообщение об ошибке:

неверный синтаксис рядом с ключевым словом '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)

Ответы [ 5 ]

32 голосов
/ 05 января 2010

Вот один из способов включить оператор case в предложение Where:

SELECT * FROM sometable
WHERE 1 = CASE WHEN somecondition THEN 1 
    WHEN someothercondition THEN 2
    ELSE ... END
4 голосов
/ 05 января 2010

Вы можете попробовать

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)
1 голос
/ 05 января 2010

Коррелированный подзапрос - одна возможность:

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
 )
0 голосов
/ 10 октября 2017

Поместите это в предложение 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)

Кроме того, вам не нужно «ВЫБРАТЬ» результат CASE.

0 голосов
/ 08 января 2010

У вас слишком много открывающих скобок перед выражением CASE.

...