我在将查询从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'
。
答案 0 :(得分:1)
isnull
函数不等同于MySQL中的if
函数,而是使用case
运算符:
SUM(case when r.group_status=1 then r.quantity else 0 end))
在第二种情况下,您似乎也错误地使用coalesce
,因为它只是从参数中获取第一个非空值,并且它不等同于MySQL if
函数,使用case
运营商也是。
同样在第二种情况下,如果没有结果,您将无法获得0
值 - 至少因为您已将其nullif
包裹起来,并且当结果总和为0时输出null
因此,您的问题的这一部分确实需要澄清,可能包括源数据样本和所需的输出。
答案 1 :(得分:1)
在您的第一个查询中,问题是
) with column as given with
已批准的列)你的isnull条件是错误的isnull(columnname,TexttoReplace)
SELECT i.item_name
, r.item_version
, SUM(ISNULL(r.group_status, 1)) AS Approved
, SUM(ISNULL(r.group_status,2)) 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
第二个查询不清楚。用数据提供数据。