我需要计算一列的净总数 - 听起来很简单。问题是某些值应该是负数,如在单独的列中标记的那样。例如,下表将产生(4 + 3-5 + 2-2 = 2)的结果。我已尝试在select子句中使用子查询执行此操作,但是当我开始为表的其他部分添加分析时,它似乎不必要地复杂且难以扩展。非常感谢任何帮助!
Sign Value
Pos 4
Pos 3
Neg 5
Pos 2
Neg 2
答案 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无关,因为你没有说你正在使用哪个数据库,但它应该很容易适应那里的任何数据库。