如何在SQL中计算Sales Vs Fcst列并输出带百分号的百分比结果
解决方案
核心调整点
- 处理整数除法截断问题:将参与计算的数值先转换为小数类型,避免整数相除自动舍去小数位导致结果不准
- 规避除零报错:用
NULLIF函数处理总误差为0的场景,分母为0时返回NULL而非抛出错误 - 百分比格式转换:将计算结果乘以100后保留指定小数位,最后拼接
%标识即可
修改后完整代码
SET ARITHABORT OFF SET ANSI_WARNINGS OFF SELECT f.STARTDATE AS 'STARTDATE', d.U_NPI_KEYATTRIBUTE AS 'NPIKeyAttribute', f.LOC AS 'DEMAND CHAIN', f.DMDUNIT AS 'DMDUNIT', d.DESCR AS 'Descr', CAST(f.TOTHIST as INTEGER) AS 'TOTAL HISTORY', f.TOTFCST AS 'TOTFCST', f.TOTFCST - f.TOTHIST AS 'TOTAL ERROR', -- 调整后的Sales VS FCST计算逻辑,保留2位小数,可自行修改ROUND第二个参数调整小数位数 CONCAT( ROUND( (CAST(f.TOTHIST AS DECIMAL(18,4)) / NULLIF(f.TOTFCST - f.TOTHIST, 0) - 1) * 100, 2 ), '%' ) AS 'Sales VS FCST' FROM SCPOMGR.FCSTPERFSTATIC f JOIN SCPOMGR.DMDUNIT d ON f.DMDUNIT=d.DMDUNIT WHERE f.STARTDATE BETWEEN '2021-01-01' AND '2021-08-28'
如果你使用的是SQL Server 2012及以上版本,也可以直接用
FORMAT函数简化格式化逻辑:FORMAT(CAST(f.TOTHIST AS DECIMAL(18,4)) / NULLIF(f.TOTFCST - f.TOTHIST, 0) - 1, 'P2') AS 'Sales VS FCST'其中
P2表示百分比格式保留2位小数,修改数字即可调整保留的小数位数。
内容的提问来源于stack exchange,提问作者JeremyU
相关产品推荐
相关产品推荐

