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

标签 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
Incorrect syntax near the keyword 'if'.
Msg 102, Level 15, State 1, Line 5
Incorrect syntax near ')'.

最佳答案

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然后将 1 添加到 SUM - 否则 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

关于sql-server - 嵌入 sum() 函数中的 T-SQL IF 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16528906/

相关文章:

sql-server - T-SQL : How Do I Create A "Private" Function Inside A Stored Procedure

java - SQL Server 的 JDBC 驱动程序抛出 SqlServerException : 'Operation not supported' while calling a stored procedure which uses cursors

sql - 从日期时间获取时间间隔

sql-server - 如何为不同的数据库多次运行 NUnit onetimesetup

json - 您可以直接查询数据库表中的 JSON 内容吗

sql-server - 在 Sql Server 中存储 N/A

sql - tSQL 不在查询中

sql - 使用sql中相互依赖的两列的先前记录的算术计算

sql - 旋转 SQL 表

sql - 如何在 PIVOT SQL 查询的日期过滤器之间添加