嵌入在sum()函数中的T-SQL IF语句

use*_*036 8 t-sql sql-server

我正在尝试将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]
Run Code Online (Sandbox Code Playgroud)

但是我收到一个错误:

Msg 156,Level 15,State 1,Line 5
关键字'if'附近的语法不正确.
消息102,级别15,状态1,行5
'''附近的语法不正确.

mar*_*c_s 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]
Run Code Online (Sandbox Code Playgroud)

因此,如果值CMTS_RQ.US_Pwr>= 37 AND <= 49再加入1至SUM-否则为0.这是否给你你在找什么?

在SQL Server 2012及更高版本中,您可以使用新IIF功能:

SUM(IIF(CMTS_RQ.US_Pwr >= 37 AND CMTS_RQ.US_Pwr <= 49, 1, 0)) AS us_pwr_good
Run Code Online (Sandbox Code Playgroud)