我有2个字段要在WHERE
语句中发送值。
在我想象的世界中,不知怎的,这会起作用:
Where CASE WHEN @ReportType = 0 THEN
od.StatusCd = 100 AND odm.StatusCd = 100
WHEN @ReportType = 1 THEN
od.statusCd = 101 AND odm.StatusCd = 101
End
And od.CompletionDate between ....
And so on....
我知道这是错的。但这就是我现在所处的位置。
答案 0 :(得分:9)
如果我已经明白你要做什么,这应该有效:
Where
(
(@ReportType = 0 AND od.StatusCd = 100 AND odm.StatusCd = 100)
OR
(@ReportType = 1 AND od.statusCd = 101 AND odm.StatusCd = 101)
)
And od.CompletionDate between ....
And so on....
答案 1 :(得分:1)
或者,您可以以联接的形式重写CASE条件,如下所示:
...
INNER JOIN
(
VALUES (0, 100, 100), (1, 101, 101)
) AS v (ReportType, odStatusCd, odmStatusCd)
ON
@ReportType = v.ReportType
AND od.statusCd = v.odStatusCd
AND odm.StatusCd = v.odmStatusCd
WHERE
od.CompletionDate between ...
AND ...
虽然可读性稍差,但这样可以避免使用OR
,从而可能导致更好(更有效)的执行计划。 (你需要测试一下。)
答案 2 :(得分:0)
您也可以这样做
WHERE od.StatusCd = 100 + @ReportType AND odm.StatusCd = 100 + @ReportType
或者您可以使用以下值声明一个新变量:
DECLARE @StatusCd = 100 + @ReportType
保持简单。