0

考虑 Oracle 中的一个简单表:

buySell     quantity
--------------------
buy         200
sell        100
...

我们想得到桌子的净数量,如果是净买入,则为正,否则为负。如何在一个查询中实现它?如果可能,首选通用解决方案(可在其他 DBMS 中使用)。但是,如果有一个卓越的仅限 Oracle 的解决方案,如果您也可以分享它,将不胜感激。

更一般地说,一种进行自定义聚合的方法(例如,在聚合之前,根据其他列的值将不同的数字乘以记录的数量)。

4

3 回答 3

2
Select
    Sum(Case When buySell = 'sell' then -1 else 1 end * quantity)
From
    table
于 2013-09-14T10:27:26.683 回答
0

你也可以这样做。

select sum(case when buysell = 'buy' then quantity else 0 end ) - 
       sum(case when buysell = 'sell' then quantity else 0 end )
 from table
于 2013-09-16T11:36:31.833 回答
0

你需要把sell负数变成负数;所以乘以-1。

select sum( case when buysell = 'sell' then -1 * quantity
                 else quantity
            end ) as result
  from table

这应该适用于大多数 SQL 方言。

于 2013-09-14T10:27:21.820 回答