【发布时间】:2021-08-05 01:48:33
【问题描述】:
在 SQL Server 中运行以下查询时出现错误:
遇到除以零错误。
select ID, CID, PTYPE, GW,PPE
, payPercentage = SUM(GW) * 100.0 / SUM(SUM(GW)) OVER (partition by ID, PPE)
from pw_part
where ID ='001014055'
group by ID,CID,PPE,PTYPE,GW
payPercentage=SUM(GW) * 100.0 / SUM(SUM(GW)) OVER (partition by ID, PPE) 导致错误
如果我将 SUM 更改为
ISNULL (SUM(gross_wages) * 100.0 / NULLIF(SUM(SUM(gross_wages)),0),0) OVER (partition by ssn, pay_period_ending)) as pctg
我遇到以下错误
函数“ISNULL”不是有效的窗口函数,不能与 OVER 子句一起使用。
提前致谢
【问题讨论】:
-
窗口函数规范包括
over( partition by ... order by ... rows between ...),并在最后一个括号之后结束。将所有这些文本放在nullif的第一个参数中:nullif(sum(..) over(...), 0) -
NULLIF(SUM(gw) * 100.0 / (SUM(SUM(gw)) OVER (partition by id, ppe)),0) as pctg - 这给了我“除以零错误遇到" 错误
-
不,您将单笔总工资除以总工资。你需要
nullif分母,所以ifnull(sum(gw) / /*Should be NULLed for zero*/nullif(sum(sum(gw)) over(), 0), 0) -
它说 - ['ifnull' 不是公认的内置函数名] - 我在 sqlserver 上运行它
-
NM... 明白了... 它是 NULL ... 谢谢您的帮助... 这有效 .... isnull(SUM(GW) * 100.0 / nullif(SUM (SUM(GW)) OVER (partition by ID, PPW), 0), 0) as pctg
标签: sql sql-server tsql