Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Oracle中,需要对这些值求和,然后减去贷方和借方票据_Oracle_Oracle9i - Fatal编程技术网

在Oracle中,需要对这些值求和,然后减去贷方和借方票据

在Oracle中,需要对这些值求和,然后减去贷方和借方票据,oracle,oracle9i,Oracle,Oracle9i,您好,请帮助我,我需要在Oracle 9i中求和这些值,然后减去贷方和借方票据 ID Acc_TYP Amt 1 CR 100 2 CR 200 3 DB 50 4 DB 50 使用上面的表结构,我需要通过(CR-DB)计算余额,如何形成逻辑 在单查询中,请帮我解决这个问题,我是oracle的初学者。提前感谢试试这个: select sum(n) from ( (selec

您好,请帮助我,我需要在Oracle 9i中求和这些值,然后减去贷方和借方票据

ID   Acc_TYP     Amt  


1     CR         100
2     CR         200
3     DB         50
4     DB         50   
使用上面的表结构,我需要通过(CR-DB)计算余额,如何形成逻辑
在单查询中,请帮我解决这个问题,我是oracle的初学者。提前感谢

试试这个:

select sum(n) from (
(select sum(amt) as n from table where acc_typ='CR') 
union 
(select -sum(amt) as n from table where acc_typ='DB')
)

您应该使用用例语句:

select sum(case when Acc_TYP='DB' 
                then -amt 
                else amt 
           end ) from t

另一个基于案例的解决方案,使用“简单案例陈述”:


您是否尝试过为此编写sql?这相当容易。提示:构造时使用案例-1表示效率低下,以及由于联合中隐含的不一致性,当贷项之和等于借项之和减去贷项之和时出现错误答案的可能性。@davidridge需要详细说明吗?如果贷项和借项的总和相等,这个解决方案怎么会返回错误的答案(只有当两个总和都返回0时才会发生这种情况,除非我们允许负金额)?没有任何迹象表明(在问题或会计原则中)禁止负金额。无论如何,如果贷方的金额为“10”,借方的金额为“-10”,则借方的金额为“10”。加上这些应该是“20”,但工会将删除其中一个“10”,答案将是“10”,而不是正确的“20”。
select sum(case when Acc_TYP='DB' 
                then -amt 
                else amt 
           end ) from t
select sum(case acc_type
             when 'CR' then +amt
             when 'DB' then -amt
           end) balance
from   ...