选择2种不同类型的总和

时间:2018-02-08 22:27:29

标签: oracle

如何编写选择查询以获得总和(信用)和总和(借方)和2列之间的差异,如下所示。交易类型0是信用,交易类型1是借方。

table records

1 个答案:

答案 0 :(得分:0)

要仅在类型为0(并忽略同一列中的其他值)时计算值的总和,请使用条件聚合:

select sum ( case transaction_type_id when 0 then amount end ) as credit, ....

你可以为debit做同样的事情,并为差异带来差异。

select sum ( case transaction_type_id when 0 then amount end )      as credit,
       sum ( case transaction_type_id when 1 then amount end )      as debit,
       sum ( case transaction_type_id when 0 then amount end ) 
         -  sum ( case transaction_type_id when 1 then amount end ) as difference
from   your_table
;

运气好的话,优化器会看到每个总和都会被计算两次,实际上它只计算一次,并在两个地方使用结果。否则,difference可以用一个条件和更紧密地编写,但它与前两个不同。