可以在sum语句中做数学吗?

时间:2016-09-29 17:30:01

标签: sql db2

我绝不是DB2的专家,如果这是一个新手问题,请道歉。我正在寻找一个特定的要求。我通过一个基于案例陈述的表来总结,但我想知道如果行中存在一个字段我们是否可以减去一个数额。

SELECT CODE, 
SUM(CASE SUBSTR(DATE,4,2)
    WHEN '01' THEN AMT
    END) as JanuaryTotal
FROM Table1

我想看看我们是否可以简单地,如果存在另一个字段,如果我们可以而不是对它进行求和,只需将其从当前的总数中减去。

SELECT CODE, 
SUM(CASE SUBSTR(DATE,4,2)
    WHEN '01' THEN CASE WHEN TYPE = 'X' 
    THEN - AMT // some possible way to do this?
    ELSE AMT
    END) as JanuaryTotal
FROM Table1

再次道歉。我知道这段代码没有运行,只是给出了一些可以看到的东西的视觉效果。

4 个答案:

答案 0 :(得分:0)

SELECT CODE, SUM(
  CASE
    WHEN SUBSTR(DATE,4,2) = '01' THEN AMT
    WHEN TYPE = 'X' THEN 0 - AMT
    ELSE AMT
  END
) as JanuaryTotal
FROM Table1

答案 1 :(得分:0)

有时缩进会有所帮助。此外,如果子字符串不是01,我不太清楚该做什么 - 我猜你不想添加任何东西。

SELECT CODE, 
SUM(CASE SUBSTR(DATE,4,2)
      WHEN '01' THEN 
        CASE 
          WHEN TYPE = 'X' THEN -1 * AMT
          ELSE AMT
        END
      ELSE 0 -- SUBSTR(DATE,4,2) is not '01'
    END) as JanuaryTotal
FROM Table1

答案 2 :(得分:0)

最简单的最终查询是为了平衡你的条件,使它们独立存在:

SELECT CODE, SUM(CASE
  WHEN SUBSTR(DATE,4,2) AND TYPE = 'X' THEN 0-AMT
  WHEN SUBSTR(DATE,4,2) AND THEN AMT END) as JanuaryTotal
FROM Table1

请注意,CASE有两种形式:

CASE <expression>
    WHEN <value> THEN ...
    WHEN <value> THEN ...

CASE
    WHEN <condition> THEN ...
    WHEN <condition> THEN ...

我将您的查询从使用第一个表单切换到第二个表单。

答案 3 :(得分:0)

SELECT CODE, SUM(
CASE
WHEN SUBSTR(DATE,4,2) = '01' and TYPE = 'X'  THEN -AMT
else AMT
END
) as JanuaryTotal
FROM Table1
group by CODE