获取列总和并用于计算总数的百分比,为什么不与CTE一起使用

Tea*_*Tea 2 sql sql-server calculation

我在查询之后做了这个,但是它为每个orderStatusName给出了0的结果,有谁知道问题在哪里?

with tbl as (
      select s.orderstatusName, c.orderStatusId,count(c.orderId) counts 
      from [dbo].[ci_orders] c left join
           [dbo].[ci_orderStatus] s 
           on s.orderStatusId = c.orderStatusId
      where orderedDate between '2018-10-01' and '2018-10-29'
      group by orderStatusName, c.orderStatusId
    )
select orderstatusName, counts/(select sum(counts) from tbl as PofTotal) from tbl
Run Code Online (Sandbox Code Playgroud)

结果是:0

Lar*_*rnu 7

你正在使用所谓的整数数学.在SQL(Server)中使用2个整数时,返回值也是一个整数.例如2 + 2 = 4,5 * 5 = 25.这同样适用于分裂8 / 10 = 0.那是因为0.8它不是一个整数,但返回值将是1(因此小数点会丢失).

更改此行为的常用方法是将其中一个表达式乘以1.0.例如:

counts/(select sum(counts) * 1.0 from tbl) as PofTotal
Run Code Online (Sandbox Code Playgroud)

如果您需要更精确,你可以增加的十进制值的精度1.0(即1.000,1.0000000等).