在“选择不工作”中使用计算的SQL查询

在“选择不工作”中使用计算的SQL查询,sql,Sql,此查询的目的是获取延迟订单占订单总数的百分比。因此,这个查询的计算部分只返回零。其他一切都可以。我对下面的部分进行了注释,该部分将返回零。我做错了什么 SELECT case LM.DState WHEN 'OH' THEN 'OH Order' WHEN 'NC' THEN 'NC Order' WHEN 'TX' THEN 'TX Order' WHEN 'WA' THEN 'WA order'

此查询的目的是获取延迟订单占订单总数的百分比。因此,这个查询的计算部分只返回零。其他一切都可以。我对下面的部分进行了注释,该部分将返回零。我做错了什么

SELECT 

        case LM.DState
        WHEN 'OH' THEN 'OH Order'
        WHEN 'NC' THEN 'NC Order'
        WHEN 'TX' THEN 'TX Order'
        WHEN 'WA' THEN 'WA order'
        Else 'Other' 
        End as 'OrderType',

        count(LM.OrderID) as 'Vol',

        sum(case
            WHEN datediff(day, S.Appt, S.Arrived) > 0 THEN 1
            else 0
            END) as 'TotalLates',

    --PART THAT IS ONLY PULLING ZEROS, SHOULD BE NON-ZERO   
    CAST (
    sum(case WHEN datediff(day, S.Appt, S.Arrived) > 0 THEN 1 else 0 END) 
    / count(LM.OrderID) 
    as decimal(5,2)
    ) *100 as 'OTD%'


FROM ((Customers.dbo.CusOrders as LM WITH (NOLOCK) inner join
    Customers.dbo.CusLocations as S WITH (NOLOCK) on LM.OrderID = S.OrderID) inner join
    Customers.dbo.Loads as L with (NOLOCK) on LM.OrderID = L.OrderID)


WHERE LM.CusCode = 'Domestic'


GROUP BY case LM.DState
        WHEN 'OH' THEN 'OH Order'
        WHEN 'NC' THEN 'NC Order'
        WHEN 'TX' THEN 'TX Order'
        WHEN 'WA' THEN 'WA Order
        Else 'Other' 
    End

这是由于整数除法会发生舍入,因为您计算的百分比值总是小于1,并且舍入为0,您可以通过将分子乘以1.0来解决此问题:

例如:

SELECT 5/7
--0
SELECT 5.0/7
--0.714285

你能发布一些样本数据吗?如果S.Appt和S.arrized之间的datadiff为0或不是0,则0似乎是一个潜在的有效响应,因为Totalates在其自己的列中拉取非零,但关键是您没有收到错误消息,您正在返回您不期望的数据。如果您需要帮助,可以查看示例输入和输出数据。
SELECT 5/7
--0
SELECT 5.0/7
--0.714285