我正在尝试将MySQL查询转换为T-SQL查询,并且包含在SUM语句中的IF语句正在绊倒我。有什么建议吗?
SELECT
CMTS_RQ.[Dated],
CMTS_RQ.CMTS_Name,
Count(CMTS_RQ.CMTS_Name) AS emat_count,
Sum(if(CMTS_RQ.US_Pwr>=37 and CMTS_RQ.US_Pwr<=49)) AS us_pwr_good
FROM
CMTS_RQ
GROUP BY
CMTS_RQ.CMTS_Name,
CMTS_RQ.[Dated]
但是我收到了一个错误:
Msg 156,Level 15,State 1,Line 5
关键字“if”附近的语法不正确。
Msg 102,Level 15,State 1,Line 5
')'附近的语法不正确。
答案 0 :(得分:16)
T-SQL没有“内联”IF
声明 - 请改用CASE
:
SELECT
CMTS_RQ.[Dated],
CMTS_RQ.CMTS_Name,
Count(CMTS_RQ.CMTS_Name) AS emat_count,
Sum(CASE
WHEN CMTS_RQ.US_Pwr >=37 AND CMTS_RQ.US_Pwr <= 49
THEN 1
ELSE 0
END) AS us_pwr_good
FROM
CMTS_RQ
GROUP BY
CMTS_RQ.CMTS_Name,
CMTS_RQ.[Dated]
因此,如果CMTS_RQ.US_Pwr
的值为>= 37 AND <= 49
,则向SUM
添加1 - 否则为0.这样可以为您提供所需内容吗?
在SQL Server 2012 及更新版本中,您可以使用新的IIF
function:
SUM(IIF(CMTS_RQ.US_Pwr >= 37 AND CMTS_RQ.US_Pwr <= 49, 1, 0)) AS us_pwr_good