【问题标题】:T-SQL IF statement embedded in a sum() function嵌入 sum() 函数的 T-SQL IF 语句
【发布时间】:2018-09-05 20:02:18
【问题描述】:

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

【问题讨论】:

    标签: sql-server tsql


    【解决方案1】:

    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 的值为&gt;= 37 AND &lt;= 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
    

    【讨论】:

    • 感谢您的洞察力,这为我指明了正确的方向。
    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多