Gufran_khan Ответов: 4

Оператор Case в предложении Where SQL SERVER


Я получаю ошибку FG при выполнении sql - запроса "Msg 156, Уровень 15, состояние 1, строка 55
Неправильный синтаксис около ключевого слова 'не'."
DECLARE @param int 
SET @param = 1
Select col1,col2,col3 from table1
WHERE table1.ASOfDate = '05/24/2013' AND(
CASE WHEN @param = 1 THEN table1.CloseCode NOT IN (2,3,8)
     WHEN @param = 2 THEN table1.CloseCode IN (2,3,8)
END)


Пожалуйста, помогите мне в этом.

4 Ответов

Рейтинг:
28

Gufran_khan

Я изменил вышеописанный запрос, как показано ниже, и теперь он работает.

Объявить @param int
SET @param = 1
Выберите col1,col2,col3 из таблицы 1
ГДЕ
Таблица 1.ASOfDate = '24.05.2013' и (
(@param = 1 и таблица 1.CloseCode NOT IN (2,3,8) ) или
(@param = 2 и табл. 1.CloseCode IN (2,3,8)))


gvprabu

вы только задали вопрос, а они уже выложили ответ...
Если вы знаете ответ, то почему вы спросили об этом?

Bruno Destro

Этот код работает и для меня.

Спасибо, что поделились решением!

Бруно Дестро

Рейтинг:
2

gvprabu

Привет,

Проверьте следующий сценарий...

-- Solution 1 : Try with Dynamic Query

DECLARE @SqlQuery VARCHAR(1000), @param int 

SELECT @param = 1, @SqlQuery =''

IF @param = 1 
BEGIN
	SELECT @SqlQuery = 'Select col1,col2,col3 from table1 WHERE ASOfDate = '''05/24/2013''' AND CloseCode NOT IN (2,3,8)'
END
ELSE IF @param = 2
BEGIN
	SELECT @SqlQuery = 'Select col1,col2,col3 from table1 WHERE ASOfDate = '''05/24/2013''' AND CloseCode IN (2,3,8)'
END
EXEC (@SqlQuery)

-- Solution 2 : Change your WHERE Condition
DECLARE @param int 

SET @param = 1

Select col1,col2,col3 from table1
WHERE table1.ASOfDate = '05/24/2013' 
AND( (@param = 1 AND CloseCode NOT IN (2,3,8)) OR
     (@param = 2 AND CloseCode IN (2,3,8))
   )


С уважением,
Гвпрабу


Рейтинг:
2

NIRANJAN MURTHT MK

Привет,

I Вы выглядите как множественное условие с соответствующими значениями столбцов означает :
используйте приведенный ниже метод, он будет работать.

DECLARE @param int 
SET @param = 1
Select col1,col2,col3 from table1
WHERE table1.ASOfDate = '05/24/2013' and 
  @param = 1 and table1.CloseCode NOT IN (2,3,8) or
  @param = 2 and table1.CloseCode IN (2,3,8) or
  @param = 3 and table1.CloseCode IN (8)


Patrice T

5 лет слишком поздно.

Рейтинг:
0

satish patel

Также решение как случай когда для В или нет
Объявить @param int
SET @param = 1
Выберите col1,col2,col3 из таблицы 1
Где табл. 1.ASOfDate = '24.05.2013' и( 1 =
Случай, когда @param = 1 и таблица 1.CloseCode NOT IN (2,3,8) THEN 0
Когда @param = 2 и таблица 1.CloseCode IN (2,3,8), ТО 0
ИНАЧЕ 1 КОНЕЦ )