You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:36:02