在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
我什至看不到任何结果。有人知道我的错误在哪里吗?
答案 0 :(得分:0)
实际上,应该反之亦然:SUM(DECODE)
,而不是DECODE(SUM)
,例如
with temp as
(select sum(decode(table_name, 'RECHNUNG' , beleg_betrag_offen)) as re_be_of,
sum(decode(table_name, 'GUTSCHRIFT', beleg_betrag_offen)) as gs_be_of,
sum(decode(table_name, 'ZAHLUNG' , beleg_betrag_offen)) as za_be_of
from your_table
)
select re_be_of,
gs_be_of,
za_be_of,
--
re_be_of + gs_be_of + za_be_of total
from temp
NVL
功能可能需要使用。
答案 1 :(得分:0)
我会简单地写:
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');
除了使用 standard CASE
语法(而不是定制和过时的decode
)之外,如果有任何table_name
,这仍将提供总和数据中缺少。
Oracle有一个很好的优化程序,但是在聚合之前过滤 可能会提高性能。