Предложение CASE SQL Server о том, где внутри скобки

У меня есть эта проблема в моем SQL-коде:

Я покажу только WHERE , потому что оно немного длинное, вот оно:

 where ((@account_status = 1027 AND a.AccountStatus = 1027 AND a.FolioNo = @folio_no AND b.ReservationNo = @reservation_id)) OR ((@account_status = 1026 AND a.AccountStatus = 1026 AND a.FolioNo = @folio_no AND b.ReservationNo = @reservation_id)) OR ((@account_status = 1025 AND a.AccountStatus = 1025 AND @trans_code = 1 AND a.AccountStatementTransCode = 1 AND b.FolioNo = @folio_no AND b.ReservationNo = @reservation_id)) OR ((@account_status = 1025 AND a.AccountStatus = 1025 AND @trans_code != 1 AND a.AccountStatementTransCode != 1 AND b.FolioNo = @folio_no AND b.ReservationNo = @reservation_id)) OR ((a.FolioNo = @folio_no AND b.ReservationNo = @reservation_id AND @trans_code = 2 AND a.AccountStatementTransCode = 2 AND case when @sub_category = 14 then i.category_id is null else i.category_id = @sub_category end )) OR ((a.FolioNo = @folio_no AND b.ReservationNo = @reservation_id AND @trans_code = 3 AND a.AccountStatementTransCode = 3 AND i.category_id = @sub_category)) OR ((a.FolioNo = @folio_no AND b.ReservationNo = @reservation_id AND @trans_code = 4 AND a.AccountStatementTransCode = 4 AND i.category_id = @sub_category)) OR ((a.FolioNo = @folio_no AND b.ReservationNo = @reservation_id AND @trans_code = 5 AND a.AccountStatementTransCode = 5 AND i.category_id = @sub_category)) OR ((a.FolioNo = @folio_no AND b.ReservationNo = @reservation_id AND @trans_code = 6 AND a.AccountStatementTransCode = 6 AND i.category_id = @sub_category)) 

Я хочу, чтобы, если входной @sub_category = 14 он вернет категорию со значениями NULL , иначе он вернет значения @sub_category . Как я могу это сделать ?

Замените логику выражения CASE ниже

 AND 1 = CASE WHEN @sub_category = 14 AND i.category_id is null THEN 1 WHEN @sub_category <> 14 AND i.category_id = @sub_category THEN 1 ELSE 0 END 

Измените свой CASE на:

 case when @sub_category = 14 then null else i.category_id = @sub_category end 

ПОПРОБУЙТЕ ЭТО : Простой способ. Если ваша category_id никогда не имеет значения -1 или вы можете использовать значение, которое никогда не будет в category_id т.е. 0,-1

 AND ISNULL(i.category_id, -1) = CASE WHEN @sub_category = 14 THEN -1 ELSE @sub_category END 
  • SQL Server: как заполнять разреженные данные остальными нулевыми значениями?
  • «Не удается подключиться к целевому серверу» при восстановлении файла bacpac на SQL Server 2014 CTP2
  • В хранимой процедуре SSIS используется Temp Table 2008 и 2014
  • Расчет «первой просроченной» даты из графика платежей
  • MS SQL 2014 - количество повторяющихся осколков по диапазону дат
  • Ошибка или функция SQL Server? Преобразование десятичных чисел
  • ранжирование результатов полнотекстового поиска нескольких строк
  • SQL-сервер конвертирует int-поле в бит
  • Кастинг 0 как DATE и DATETIME
  • Создайте 7-значные коды как ID для каждой строки
  • Ошибка создания таблицы SQL Server: в ссылочном
  • Interesting Posts

    Функция SQL CLR возвращает ошибку, пытающуюся использовать контекст для создания таблицы и вставки строк

    Ограничение – это ключ – это ограничение?

    Как применить раздел by и row_number () для внутреннего соединения и оператора case в sql-запросе

    Использование хранимых процедур MSDB в хранимой процедуре базы данных приложения

    SSIS – пропустить отсутствующие файлы

    Установите одно поле строки как умножение на 2 других

    Могу ли я получить «BULK INSERT» -подобные скорости при вставке из JAVA в SQL Server?

    Как изменить структуру таблицы, если переменная равна нулю

    Сохраненная процедура, которую необходимо удалить из таблицы, затем сравнить входящее значение

    SQL Server: неявный тип преобразования данных

    Найти всех детей, не являющихся родителями

    Можно ли заказать любой столбец с параметром хранимой процедуры в SQL Server?

    Заявление о блокировке не будет компилироваться с помощью INNER JOIN present

    Как изменить несколько узлов с помощью SQL XQuery в MS SQL 2005

    При использовании sp_executesql с временными таблицами рекомендуется использовать глобальные временные таблицы

    Давайте будем гением компьютера.