【发布时间】:2011-05-28 00:33:49
【问题描述】:
在这里找到了几个类似的问题,但不知道如何应用于我的场景。
我的函数有一个名为 @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)
显然这是不正确的。
正确的语法是什么?
【问题讨论】:
标签: sql sql-server tsql where-clause case-statement