2

我需要计算一列的净总数——听起来很简单。问题是某些值应该是负数,如在单独的列中标记的那样。例如,下表将产生 (4+3-5+2-2 = 2) 的结果。我已经尝试在 select 子句中使用子查询来执行此操作,但是当我开始为我的表的其他部分添加分析时,它似乎不必要地复杂且难以扩展。任何帮助深表感谢!

Sign     Value
Pos        4
Pos        3
Neg        5
Pos        2
Neg        2
4

4 回答 4

6

使用CASE语句应该适用于大多数版本的 sql:

SELECT SUM( CASE
               WHEN t.Sign = 'Pos' THEN t.Value
               ELSE t.Value * -1
            END
          ) AS Total
FROM YourTable AS t
于 2012-06-23T17:45:39.940 回答
3

试试这个:

SELECT SUM(IF(sign = 'Pos', Value, Value * (-1))) as total FROM table
于 2012-06-23T17:40:33.863 回答
1

我使用 oracle 11g 作为数据库和 sql developer 作为用户界面,根据同一表中另一个字段的值从表中的单个字段添加行。

这有效:

SELECT COUNTRY_ID, SUM(
    CASE
        WHEN ACCOUNT IN 'PTBI' THEN AMOUNT
        WHEN ACCOUNT IN 'MLS_ENT' THEN AMOUNT
        WHEN ACCOUNT IN 'VAL_ALLOW' THEN AMOUNT
        WHEN ACCOUNT IN 'RSC_DEV' THEN AMOUNT * -1
    END) AS TI
FROM SAMP_TAX_F4
GROUP BY COUNTRY_ID;
于 2013-10-21T21:25:44.603 回答
0
select a= sum(Value) where Sign like 'pos'
select b = sum(Value) where Signe like 'neg'
select total = a-b

这是 abit sql-agnostic,因为你没有说你正在使用哪个 db,但应该很容易将它适配到那里的任何 db。

于 2012-06-23T17:44:11.100 回答