sql-server - SQL-SERVER - CASE 错误 - 特定源中的 CASE 不起作用
问题描述
我正在处理一个我想要一整个月的平均温度的查询,但我有一个挑战。当新的一年开始时,月份是 1,我不能使用命令:
MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, -1, GETDATE()))
因为第 1 个月减去 1 是第 0 个月。
因此,我不想使用 case 表达式来使我的代码正常工作。
当我运行下面的查询时,我收到以下错误:
消息 156,第 15 级,状态 1,第 6 行
关键字“CASE”附近的语法不正确。
当然,我希望以下查询起作用。有人能帮我吗?
SELECT AVG(Value) AS AVG_temp
FROM(
SELECT Value, TimestampUTC
WHERE SourceName = 'Buitentemperatuur'
CASE
WHEN MONTH(TimestampUTC) = 1
THEN MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, +11, GETDATE()))
and YEAR(TimestampUTC) = YEAR(DATEADD(YEAR, -1, GETDATE()))
ELSE
MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, -1, GETDATE()))
and YEAR(TimestampUTC) = YEAR(DATEADD(YEAR, 0, GETDATE()))
END
FROM vDataLogChannelValue
) x
我工作的程序是 Microsoft SQL Server Management Studio 2014。我已经对代码的其他部分进行了一些 UNIT 测试。当我添加 CASE 时,错误会激活并且代码不再起作用。
更新:
感谢您对它现在起作用的响应,但是现在我有以下警告,这对我来说没有意义,因为它在我不在此查询中时测试它时起作用:
消息 102,第 15 级,状态 1,第 8 行
'=' 附近的语法不正确。
这是关于以下行:
THEN MONTH(TimestampUTC) = MONTH(DATEADD(MONTH, +11, GETDATE()))
解决方案
您必须在第一个子句AND
之后有一个关键字。WHERE
然后您将不得不构建另一个WHERE
使用该CASE
语句的子句。除此之外,现在应该在THEN
子句中进行分配。
下面是一个可以在语法方面起作用的示例:
SELECT Value, TimestampUTC
WHERE SourceName = 'Buitentemperatuur' AND SomethingElse =
CASE
WHEN MONTH(TimestampUTC) = 1
THEN 123
ELSE
234
END
FROM vDataLogChannelValue
) x
推荐阅读
- python-3.x - 使用 --onefile 选项添加文本文件
- python - Obtain text from a form/field of another application
- python - 熊猫:删除重复的日期但保留最后一个
- node.js - How do you access the directory that your module is in?
- laravel - Laravel route view name declaration not showing up
- r - 根据另一列中的不同值添加一列
- sql - 两列中的 ID - 查找一个 ID 并检索另一个 ID
- android - How to directly click/tap text link inside message block by Appium automated tool
- c# - How to fix the Any method seemingly returning true in If statement no matter what
- ruby-on-rails - Rails:向本地服务器发出获取请求时出错