【发布时间】:2019-12-18 22:36:30
【问题描述】:
我正在尝试减去两个不同选择语句的值。第一个 select 语句返回一个值并且永远不会为 null,但第二个可能返回 NULL。如何用零值替换 NULL?我尝试使用 COALESCE 但仍然得到一个 NULL 值作为回报(示例 1)。我尝试将两个 select 语句插入到单独的表中并使用 ISNULL(示例 2)。我还在临时表中尝试了一个 case 语句,但这也不起作用(示例 3)。 示例 1:
Declare @AccountNumber varchar(50) = '1234'
,@PayType varchar(15) = 'Full'
,@PayPeriod varchar(50) = '2019/05/31'
BEGIN
SELECT (
SELECT SUM(MyTable.AMOUNT)
FROM MyTable
where MyTable.ACCOUNT_NUMBER = @AccountNumber
AND MyTable.PAY_PERIOD = @PayPeriod
AND PAY_TYPE = @PayType) -
(SELECT COALESCE(MyTable.AMOUNT,0)
FROM MyTable
where MyTable.ACCOUNT_NUMBER = @AccountNumber
AND MyTable.PAY_PERIOD = @PayPeriod
AND PAY_TYPE = @PayType
AND CODE = 'ABC')AS FINALRESULT
END
示例 2:
Declare @AccountNumber varchar(50) = '1234'
,@PayType varchar(15) = 'Full'
,@PayPeriod varchar(50) = '2019/05/31'
BEGIN
WITH tempTable1 as (
(SELECT SUM(MyTable.AMOUNT) as Result
FROM MyTable
where MyTable.ACCOUNT_NUMBER = @AccountNumber
AND MyTable.PAY_PERIOD = @PayPeriod
AND PAY_TYPE = @PayType)
)
,tempTable2 as(
(SELECT MyTable.AMOUNT AS Result2
FROM MyTable
where MyTable.ACCOUNT_NUMBER = @AccountNumber
AND MyTable.PAY_PERIOD = @PayPeriod
AND PAY_TYPE = @PayType
AND CODE = 'ABC')
)
SELECT (SELECT SUM(Result) FROM tempTable1) - (SELECT ISNULL(Result2 FROM tempTable2),0) as FINALRESULT
END
示例 3:
Declare @AccountNumber varchar(50) = '1234'
,@PayType varchar(15) = 'Full'
,@PayPeriod varchar(50) = '2019/05/31'
BEGIN
WITH tempTable1 as (
(SELECT SUM(MyTable.AMOUNT) as Result
FROM MyTable
where MyTable.ACCOUNT_NUMBER = @AccountNumber
AND MyTable.PAY_PERIOD = @PayPeriod
AND PAY_TYPE = @PayType)
)
,tempTable2 as(
(SELECT MyTable.AMOUNT AS Result2
FROM MyTable
where MyTable.ACCOUNT_NUMBER = @AccountNumber
AND MyTable.PAY_PERIOD = @PayPeriod
AND PAY_TYPE = @PayType
AND CODE = 'ABC')
)
SELECT (SELECT SUM(Result) FROM tempTable1) - (
SELECT
CASE
WHEN Result2 IS NOT NULL THEN Result2
ELSE '0'
END AS Result2
FROM tempTable2
) as FINALRESULT
END
最终,我需要 Result1(100) - Result2(NULL) = 100
【问题讨论】:
标签: sql sql-server tsql group-by pivot