计算两个字段之和之间的差异

时间:2014-06-10 03:52:15

标签: mysql sql oracle vba

我有一张桌子,我从表中扣除信用卡和借记卡以获得我的金额,但这里的问题是,它只反映在一行中,我的信用行只有几行的价值,其余的是空白。

示例表我有成本,利润,借记和贷记,我正在做借记金额和贷方金额之间的差额以产生一个问题,这里的问题是它只影响单个价值

这是我做的事情

SELECT ACC, PROFIT, COST, PROJ,Sum(CREDIT),Sum(DEBIT),Sum(CREDIT)- Sum(DEBIT) asAMOUNT FROM SAMPLE_TBL GROUP BY ACC, PROFIT,COST,PROJECT;

我得到了值

ACC PROFIT  COST    PROJ    debit    credit AMOUNT

1000    1316    105472      18000       
1000    1316    614550      20000       
1000    1348    614576      16000       
1000    2032    616034      20000       
150700  1316    614550      1200    800 -400

150700  1348    614576      400 

这里的问题是,它不影响AMOUNT中的剩余行我可以知道原因

2 个答案:

答案 0 :(得分:1)

我认为问题是您在一列或多列中有NULL个值。如果是这种情况,处理此问题的标准SQL方法是使用coalesce()

SELECT ACC, PROFIT, COST, PROJ, Sum(CREDIT), Sum(DEBIT),
       (COALESCE(Sum(CREDIT), 0) - COALESCE(Sum(DEBIT), 0)) as AMOUNT
FROM SAMPLE_TBL
GROUP BY ACC, PROFIT, COST, PROJECT;

这会将NULL值替换为0。它可以在Oracle和MySQL(在问题上标记的两个数据库)以及大多数其他数据库中使用。

答案 1 :(得分:0)

如果您使用的是MySQL

SELECT ACC, PROFIT, COST, PROJ,Sum(IFNULL(CREDIT,0)),Sum(IFNULL(DEBIT,0)),
Sum(IFNULL(CREDIT,0))- Sum(IFNULL(DEBIT,0)) asAMOUNT 
FROM SAMPLE_TBL GROUP BY ACC, PROFIT,COST,PROJECT;

如果您使用的是MSSQL,则将IFNULL替换为ISNULL