我在将查询从 MySQL 更改为 SQL Server 时遇到问题。我试图在 SQL 中将其更改为 ISNULL
和 IIF
但仍然不起作用。欢迎任何提示或帮助,谢谢!
问题 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/