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

Mysql 计算两个字段之和之间的差,mysql,sql,oracle,vba,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,CO

我有一个表,我从表中扣除贷方和借方来获得我的金额,但这里的问题是,它只反映在一行中,我的贷方行只有几行有值,其余的都是空的

样本表我有成本、利润、借方和贷方,我在做借方和贷方之和之间的差额来产生一个金额,这里的问题是它只影响一个值

这就是我所做的

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 
这里的问题是,它不会影响剩余行的数量。如果您使用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。我认为问题在于一列或多列中有
NULL
值。如果是这种情况,处理这种情况的标准SQL方法是使用
coalesce()


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

我认为这是因为CREDIT列在其他行中为NULL。如果是,请使用IsNULL(信用,0)如果您使用的是MSSQL或IFNULL(CREDT,0)如果您使用的是mySQLyes,则列为null,那么如何使用SUM(IsNULL(信用,0))之类的聚合和函数实现IsNULL是,COALESCE是ANSI标准
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;