用于根据其他字段添加或减去值的SQL查询

时间:2012-06-23 17:37:00

标签: sql

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

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

4 个答案:

答案 0 :(得分:6)

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

SELECT SUM( CASE
               WHEN t.Sign = 'Pos' THEN t.Value
               ELSE t.Value * -1
            END
          ) AS Total
FROM YourTable AS t

答案 1 :(得分:3)

试试这个:

SELECT SUM(IF(sign = 'Pos', Value, Value * (-1))) as total FROM table

答案 2 :(得分: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;

答案 3 :(得分:0)

select a= sum(Value) where Sign like 'pos'
select b = sum(Value) where Signe like 'neg'
select total = a-b

这有点与sql无关,因为你没有说你正在使用哪个数据库,但它应该很容易适应那里的任何数据库。