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

时间:2013-05-13 18:41:22

标签: sql-server tsql

我正在尝试将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
  ')'附近的语法不正确。

1 个答案:

答案 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