10

我正在尝试将 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]

但我收到一个错误:

消息 156,级别 15,状态 1,第 5 行
关键字“if”附近的语法不正确。
消息 102,级别 15,状态 1,第 5 行
')' 附近的语法不正确。

4

1 回答 1

21

T-SQL 没有“内联”IF语句 - 使用 aCASE代替:

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 <= 491 添加到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
于 2013-05-13T18:43:21.703 回答