Нашел здесь несколько подобных вопросов, но не смог понять, как применить к моему сценарию.
Моя функция имеет параметр @IncludeBelow. Значения: 0 или 1 (BIT).
У меня есть этот запрос:
SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND l.SomeOtherCondition = @SomeOtherValue
Если @IncludeBelow равно 0, мне нужен запрос:
SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND l.SomeOtherCondition = @SomeOtherValue
AND p.LocationType = @LocationType -- additional filter to only include level.
Если @IncludeBelow равно 1, эта последняя строка должна быть исключена. (т.е. не применяйте фильтр).
Я предполагаю, что это должен быть оператор CASE
, но не может понять синтаксис.
Вот что я пробовал:
SELECT p.*
FROM Locations l
INNER JOIN Posts p
on l.LocationId = p.LocationId
WHERE l.Condition1 = @Value1
AND l.SomeOtherCondition = @SomeOtherValue
AND (CASE @IncludeBelow WHEN 0 THEN p.LocationTypeId = @LocationType ELSE 1 = 1)
Очевидно, что это неверно.
Какой правильный синтаксис?