mysql - 将 'IF and NULL' 从 MySQL 更改为 SQL Server

标签 mysql sql sql-server

我在将查询从 MySQL 更改为 SQL Server 时遇到问题。我试图在 SQL 中将其更改为 ISNULLIIF 但仍然不起作用。欢迎任何提示或帮助,谢谢!

问题 1:

MySQL

SELECT i.item_name
         , r.item_version
         , SUM(IF(r.group_status=1,r.quantity,0)) AS `Approved`
         , SUM(IF(r.group_status=2,r.quantity,0)) AS `NotApproved`
         , SUM(r.quantity)                        AS `Total`
      FROM requesters r
      JOIN items i
        ON i.item_id = r.item_id
     WHERE r.group_status IN (1,2)
       AND r.requested_date >= '$a'
       AND r.requested_date <= '$b'
     GROUP
        BY i.item_name
         , r.item_version

SQL Server

SELECT i.item_name
     , r.item_version
     , SUM(ISNULL(r.group_status=1,r.quantity,0)) AS `Approved`
     , SUM(ISNULL(r.group_status=2,r.quantity,0)) AS `NotApproved`
     , SUM(r.quantity)                        AS `Total`
  FROM requesters r
  JOIN items i
    ON i.item_id = r.item_id
 WHERE r.group_status IN (1,2)
   AND r.requested_date >= '$a'
   AND r.requested_date <= '$b'
 GROUP
    BY i.item_name
     , r.item_version

它一直说 Incorrect syntax near ',' 并且仍然不起作用。

问题 2:

MySQL

SELECT IFNULL(SUM(IF(endusers.price,endusers.price,0)),0) AS `totalprice` 
FROM endusers
WHERE requester_code = '$req_code'

SQL Server

SELECT NULLIF(SUM(COALESCE(endusers.price,endusers.price,0)),0) AS 'totalprice' 
FROM endusers 
WHERE requester_code = '$req_code'

我在问题2中使用COALESCE时的问题,当表中没有值时,它不会显示'0'

最佳答案

SQL Server 中的isnull 函数不等同于MySQL 中的if 函数,请改用case 运算符:

SUM(case when r.group_status=1 then r.quantity else 0 end))

在第二种情况下,您似乎也在错误地使用 coalesce,因为它只是从参数中获取第一个非空值,并且它不等同于 MySQL if 函数,也使用 case 运算符。

同样在第二种情况下,如果没有结果,您将不会得到 0 值 - 至少因为您用 nullif 包装了它并且它输出 null 当结果总和为 0 时。所以你的问题的这一部分确实需要澄清,可能需要源数据样本和所需的输出。

关于mysql - 将 'IF and NULL' 从 MySQL 更改为 SQL Server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37319447/

相关文章:

php - 选择没有值的所有行

sql - 使用 PostgreSQL 中的约束索引用于 ORDER BY 的列

sql-server - 比较 SQL Server 中的两行

sql-server - RedGate SQL 源代码管理适合我吗?

mysql - 用于更新多个表中的数据的存储过程

python - 按值从 MySQL 数组中删除列表元素的正确语法

mysql - MYSQL错误代码: 1442?有什么解决办法吗

mysql - 这种场景下如何查询两个表之间的数据呢?

mysql - 确定分组 AUTO_INCREMENT 列上的下一个自动增量值

sql-server - 特定字符在字符串中出现的次数