两段SQL相减其中一段是空数据,怎么减?

SELECT SUM
 ( ContractSum )  ContractSum
FROM
 [dbo].[OutContract] 
WHERE
 
  contractComplate IN ( '执行中' ) 
 AND DATEDIFF( MONTH, inputtime,'${dateinmonth(CONCATENATE(year,"-",month,"-1"),-1)}' ) = 1

 

 

SELECT SUM
 ( ContractSum )  ContractSum
FROM
 [dbo].[OutContract] 
WHERE
 
  contractComplate IN ( '执行中' ) 
 AND DATEDIFF( MONTH, inputtime,'${dateinmonth(CONCATENATE(year,"-",month,"-1"),-1)}' ) = 0

如果第二段SQL返回的结果是空数据,可以使用IFNULL函数将其转换为0,然后再对两段 SQL 进行相减,如下所示:

SELECT

 (IFNULL(SUM(OutContract.ContractSum),0) - IFNULL(SUM(OutContract2.ContractSum),0)) AS ContractDifference

FROM

 [dbo].[OutContract] OutContract

LEFT JOIN

 [dbo].[OutContract] OutContract2

ON

 OutContract.id = OutContract2.id

WHERE

 OutContract.contractComplate IN ('执行中')

 AND DATEDIFF(MONTH, OutContract.inputtime, '${dateinmonth(CONCATENATE(year,"-",month,"-1"),-1)}') = 1

 AND DATEDIFF(MONTH, OutContract2.inputtime, '${dateinmonth(CONCATENATE(year,"-",month,"-1"),-1)}') = 0