1: 在Oracle数据库中,需要使用到除法,但是除数有可能为零,如果直接使用sql中的除法运算符(/),则会报错
解决方法:
计算除法的语法和示例
--Oracle中计算除法语法 SELECT case WHEN(NVL(除数, 0))!=0 THEN round(被除数 / 除数,需要保留的小数位数) ELSE 0 END result FROM DUAL
例子:
SELECT t4.NAME, t4."总成本", t4."营业额", t4."利润", CASE WHEN(NVL( t4."总成本", 0)) !=0 THEN ROUND(t4."利润" / t4."总成本" , 2) ELSE 0 END "利润率" FROM ( WITH linshi AS ( SELECT t2.NAME, (t2.PUR_PRICE * t1.SALE_NUM) + t1.HUMAN_COST + t1.TRAN_COST + t1.OTH_COST AS "总成本", t2.PRICE * t1.SALE_NUM AS "营业额" FROM BRAIN_BAK.TEST_DW_ITEMS_DETA t1 INNER JOIN BRAIN_BAK.TEST_DW_ITEMS_PRICE t2 ON t1.NAME = t2.NAME ) --一张临时表 SELECT t3.NAME, t3."总成本", t3."营业额", t3."营业额" - t3."总成本" AS "利润" FROM linshi t3 ) t4 ;
2:使用 decode ()函数
decode(A.REFORM_TASK_TOTAL,0,0 , round((A.REFORM_TASK_NUM / A.REFORM_TASK_TOTAL) * 100,2 )) AS 年度改革任务整改完成率,