我绝不是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
再次道歉。我知道这段代码没有运行,只是给出了一些可以看到的东西的视觉效果。
答案 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