我需要计算一列的净总数——听起来很简单。问题是某些值应该是负数,如在单独的列中标记的那样。例如,下表将产生 (4+3-5+2-2 = 2) 的结果。我已经尝试在 select 子句中使用子查询来执行此操作,但是当我开始为我的表的其他部分添加分析时,它似乎不必要地复杂且难以扩展。任何帮助深表感谢!
Sign Value
Pos 4
Pos 3
Neg 5
Pos 2
Neg 2
我需要计算一列的净总数——听起来很简单。问题是某些值应该是负数,如在单独的列中标记的那样。例如,下表将产生 (4+3-5+2-2 = 2) 的结果。我已经尝试在 select 子句中使用子查询来执行此操作,但是当我开始为我的表的其他部分添加分析时,它似乎不必要地复杂且难以扩展。任何帮助深表感谢!
Sign Value
Pos 4
Pos 3
Neg 5
Pos 2
Neg 2
使用CASE
语句应该适用于大多数版本的 sql:
SELECT SUM( CASE
WHEN t.Sign = 'Pos' THEN t.Value
ELSE t.Value * -1
END
) AS Total
FROM YourTable AS t
试试这个:
SELECT SUM(IF(sign = 'Pos', Value, Value * (-1))) as total FROM table
我使用 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;
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。