sql - 如何对多个 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
我什至看不到任何结果。有谁知道我的错误在哪里?
解决方案
我只想写:
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 有一个很好的优化器,但是在聚合之前进行过滤可能会提高性能。
推荐阅读
- c# - 火力基地动态链接
- php - laravel 文件系统返回数据字符串而不是视频
- c - Char Driver Linux:file_operations读写的正确实现是什么?需要进行哪些偏移检查?
- python - 当利率和付款随时间变化时,如何使用 Pandas 计算投资的未来价值?
- javascript - 正则表达式逗号作为可选字符
- cassandra - Apache Cassandra 中临时数据的概念
- javascript - 根据另一个数组的顺序对数组进行排序 - 对输入
- c# - 如何制作编辑表格?
- c++ - 快速选择算法返回第 K 个最小元素。递归参数问题
- azure-data-factory - 如何在 Azure 数据工厂中参数化数据集定义文件名