这里是一个公式:
1 / cast(replace(count(usertbl.[name]) over (partition by usertbl.[name], calendar.[Date]), 0, 1) as decimal(2,0)) as [WorkDays]
假定计数分区带回6,因此公式实际上是1/6。目前,它带回了0.17(所以0.17 * 6 = 1.02)。
当我将分区的小数乘以计数时,我想尽可能接近1。因此0.16666667 * 6 = 1.00000002,优于1.02。
如何更改上述公式以达到小数点后8位?我尝试了十进制(10,8),但没有成功。
我不是要减少小数位,而是要增加小数位。
谢谢!
如果仅使用它会发生什么?
1.0 / cast(count(*) over (partition by usertbl.[name], calendar.[Date]) as [WorkDays]
我不知道replace()
应该做什么。
尝试将1强制转换为浮点数或所需的十进制精度,如果您的计数为6,则查询看起来像]
select cast(1.0 as float) / cast(replace(6, 0, 1) as decimal(2,0))
请参阅小提琴
https://dbfiddle.uk/?rdbms=sqlserver_2017&fiddle=d72bf3f3f34dc4a395535da02c0722b9