改变' IF和NULL'从MySQL到SQL Server

时间:2016-05-19 09:42:26

标签: 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'

2 个答案:

答案 0 :(得分:1)

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包裹起来,并且当结果总和为0时输出null因此,您的问题的这一部分确实需要澄清,可能包括源数据样本和所需的输出。

答案 1 :(得分:1)

在您的第一个查询中,问题是

  1. 您无法提供单引号() with column as given with已批准的列)
  2. 你的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
    
  3. 第二个查询不清楚。用数据提供数据。