首页 > 解决方案 > 如何对多个 DECODE 值求和?

问题描述

我的 SELECT 案例中有以下解码:

DECODE (table_name, 'RECHNUNG', SUM(beleg_betrag_offen) ) as re_be_of,
DECODE (table_name, 'GUTSCHRIFT', SUM(beleg_betrag_offen) ) as gs_be_of,
DECODE (table_name, 'ZAHLUNG', SUM(beleg_betrag_offen) ) as za_be_of

我想将这 3 个值相加(每个 DECODE 总是有一些结果),但我做不到。当我写一个简单的

re_be_of + gs_be_of + za_be_of

我什至看不到任何结果。有谁知道我的错误在哪里?

标签: sqloraclesumdecode

解决方案


我只想写:

select sum(case when table_name = 'RECHNUNG' then beleg_betrag_offen
           end) as re_be_of,
       sum(case when table_name = 'GUTSCHRIFT' then beleg_betrag_offen
           end) as gs_be_of,
       sum(case when table_name = 'ZAHLUNG' then beleg_betrag_offen
           end) as za_be_of,
       sum(beleg_betrag_offen) as total
from your_table
where table_name in ('RECHNUNG', 'GUTSCHRIFT', 'ZAHLUNG');

除了使用标准 CASE语法(而不是定制和过时的)之外,如果数据中缺少decode任何 s,这仍将提供总和。table_name

Oracle 有一个很好的优化器,但是在聚合之前进行过滤可能会提高性能。


推荐阅读