2016-10-28 2 views
2

Я выбираю записи из столбца с именем [tagged], и по умолчанию он равен нулю.
Моя проблема в том, что переменная @tagged равна NULL, тогда я хочу выбрать оба значения 0,1. Это заставляет меня думать, что я должен делать IF/ELSE, но мои попытки терпят неудачу.IF/Else/CASE Statement в предложениях WHERE

--- Простой пример:

declare @tagged int = NULL 

SELECT * 
FROM [TableName] 
WHERE datecreated > '2016-01-01' 
AND tagged = @tagged 

Многие АБД рекомендовать пункт СЛУЧАЙ. Но мне нужна помощь, зная, где его добавить.

Добавляю ли я его в запрос?

Моя слабая попытка была такова:


SELECT * 
FROM [TableName] 
WHERE datecreated > '2016-01-01' 
AND (
    CASE @tagged 
    WHEN 0 THEN (tagged = 0) 
    WHEN 1 THEN (tagged = 1) 
    ELSE (tagged IN(0,1) 
    END 
) 
+0

Символ 'CASE' может быть использован в' JOIN', как показано в [ здесь] (http://stackoverflow.com/a/10260297/92546). Предложение WHERE может использовать один и тот же шаблон. – HABO

ответ

3

Используйте OR состояние, а не коренастый CASE заявление.

SELECT * 
FROM [TableName] 
WHERE datecreated > '2016-01-01' 
     AND (tagged = @tagged 
       OR @tagged IS NULL) 

В случае, если вы хотите решить его с помощью CASE то (учитывая нет NULL значения в столбце tagged)

WHERE datecreated > '2016-01-01' 
     AND tagged = CASE 
         WHEN @tagged IS NOT NULL THEN @tagged 
         ELSE tagged 
        END 
+0

Именно то, что я искал. В моем случае нет значений NULL, поэтому имеет смысл, как вы отформатировали структуру CASE. – coffeemonitor

+0

@coffeemonitor - Gald это помогло вам .. Я предпочитаю условие «ИЛИ». Что просто и доступно для чтения –

 Смежные вопросы

  • Нет связанных вопросов^_^