Oracle SQL如何根据金额计算结果新增单独列标识盈亏
实现方案
直接通过Oracle的CASE条件判断表达式即可实现需求,你可以参考下面两种修改方式:
方式1:直接在原查询基础上新增标识列(写法简单)
SELECT ((NVL(asset_cost, 0) - NVL(accumalated_dep, 0)) - NVL(closed_lability, 0)) AS net_amount, CASE WHEN ((NVL(asset_cost, 0) - NVL(accumalated_dep, 0)) - NVL(closed_lability, 0)) < 0 THEN '损失' WHEN ((NVL(asset_cost, 0) - NVL(accumalated_dep, 0)) - NVL(closed_lability, 0)) > 0 THEN '收益' ELSE '持平' END AS profit_loss FROM Asset_management;
方式2:通过CTE封装计算逻辑(避免重复写计算规则,后续调整更方便)
WITH asset_cal AS ( SELECT ((NVL(asset_cost, 0) - NVL(accumalated_dep, 0)) - NVL(closed_lability, 0)) AS net_amount FROM Asset_management ) SELECT net_amount, CASE WHEN net_amount < 0 THEN '损失' WHEN net_amount > 0 THEN '收益' ELSE '持平' END AS profit_loss FROM asset_cal;
说明
- 如果不需要处理金额为0的场景,可以删除
ELSE '持平'分支,此时金额为0时标识列会返回NULL,也可以根据业务需要自定义0值的对应标识 - 列别名
net_amount(净额)、profit_loss(盈亏标识)可以按照你们的业务命名规范自行调整
内容的提问来源于stack exchange,提问作者Abinnaya
相关产品推荐
相关产品推荐

