案例陈述中的选择性求和

时间:2017-01-09 07:45:39

标签: sql oracle oracle11g

我在case语句中使用sum函数。我想对行进行选择性求和。

case when
type in ('A','B')
then nvl(SUM(Amount_1),Amount)
else Amount

Amount和Amount_1有两列,Amount_1列中,我想根据某些条件C1删除几行。对于例如如果我有10行在A中有类型且基于条件C1,我只得到8行,那么我想在仅8行的基础上对Amount_1列求和。

1 个答案:

答案 0 :(得分:2)

我认为您已正确理解基本逻辑,但您的语法有点偏差。你应该在CASE函数中使用SUM()表达式,而不是相反。

SELECT type,
       SUM(CASE WHEN type IN ('A', 'B')
                THEN COALESCE(Amount_1, Amount) ELSE Amount END) AS type_sum  -- ELSE 0 ?
FROM yourTable

这将为COALESCE(Amount_1, Amount)typeA的记录计算B的总和,否则将在总和中使用Amount 。如果您打算不计算不匹配的记录,请使用ELSE 0表达式中的CASE修改我的查询。