sql - 仅对 Oracle SQL 中特定条件的字段求和
问题描述
我正在尝试从表格中获取金额,我想将满足特定条件的一些金额相加,同时保留未满足条件的其他金额。
我正在尝试这个解决方案,但即使它符合条件,它仍然无法总结。
SELECT
price_type,
CASE trim(price_type)
WHEN 'TYPE1' THEN sum(bill_amt)
ELSE bill_amt
END bill_amt
FROM (
SELECT
price_type,
bill_amt
FROM price_val_tbl
)
GROUP BY price_type, bill_amt
预期输出:
PRICE_TYPE BILL_AMT
========== ========
TYPE1 50
TYPE2 100
TYPE2 200
实际输出
PRICE_TYPE BILL_AMT
========== ========
TYPE1 100
TYPE1 -50
TYPE2 100
TYPE2 200
解决方案
这是您想要的情况UNION ALL
:
SELECT price_type, SUM(bill_amt)
FROM price_val_tbl
WHERE trim(price_type) = 'TYPE1'
GROUP BY price_type
UNION ALL
SELECT price_type, bill_amt
FROM price_val_tbl
WHERE trim(price_type) <> 'TYPE1';
您需要的原因UNION ALL
是因为您在每一行上都没有唯一标识符。您可以像这样使用子查询和聚合:
SELECT MIN(price_type) as price_type,
SUM(bill_amt) as billL_amt
FROM (SELECT pv.*, rownum as rn
FROM price_val_tbl pv
) pv
GROUP BY (CASE WHEN trim(price_type) = 'TYPE1' THEN -1 ELSE rn END) ;
但是,它在做什么还不太清楚。
推荐阅读
- firebase - Firebase 消息未正确触发 onResume / onLaunch
- go - 如何动态构建查询过滤器
- python - 如何摆脱python中除了字母之外的所有东西?
- c# - 如何一直提示输入直到它有效?
- python - Plotly Express 3D 向量
- go - 使用系统调用在 Go 中的 Chroot 给出错误
- reactjs - 任何不在 React 组件中使用 Proptypes 的理由
- javascript - 提交表单时出错:无法使用 NodeJS + ExpressJS 发布
- javascript - 在 jquery 中调用 react this.function
- python - 如何访问 H2O for python 中的混淆矩阵元素?