【发布时间】:2021-11-21 03:37:41
【问题描述】:
当我尝试在 SQL Server 中使用以下查询时,我遇到了一些语法问题。我想根据条件显示WHERE 子句。
这是我的代码:
DECLARE @isActual = 0
SELECT
SolverRunId, PointId, TimeStampUtc, Value,
UnitOfMeasure, Reliability
FROM
(SELECT
bt.SolverRunId, bt.PointId, bt.TimeStampUtc,
bt.Value, bt.UnitOfMeasure, bt.Reliability
FROM
cte bt
WHERE
bt.TimeStampUtc = bt.TargetTimeUtc
UNION ALL
SELECT
a.SolverRunId, a.PointId, a.TimeStampUtc, a.Value,
a.UnitOfMeasure, a.Reliability
FROM
cte a
WHERE
-- I tried using this case but it is syntactically incorrect
CASE
WHEN @isActual = 0 THEN a.TimeStamUtc > @endDateUtc
ELSE a.TimestampUtc <= @endDateUtc
END
-- instead of this. I wanted to have conditional where based on @isActual value from 0 to 1
a.TimeStampUtc > @endDateUtc
AND a.SolverRunId = @maxRun) x
ORDER BY
SolverRunId, PointId, TimeStampUtc;
我希望将基于 @isActual 评估的 where 条件设置为 true 或 false
【问题讨论】:
-
1) 这是一个
case表达式。 -
2) 在 WHERE 子句中最好使用常规的 AND/OR 结构而不是大小写。
-
CASE返回一个 标量 值,而不是布尔结果。尽管无论如何都不要在WHERE中使用CASE表达式,但请坚持使用AND和OR语句。
标签: sql sql-server tsql case