将整数转换为十进制

时间:2017-07-12 11:33:38

标签: sql sql-server casting decimal

表中的两列是INT,SA.SalesQuantity和SA.RefundQuantity

我想使用案例陈述计算2107和2016之间的差异,如下所示:

(SUM(CASE WHEN SA.FISCALYEAR = 2017 AND SA.FISCALWEEK = 22 
THEN SA.SalesQuantity-SA.RefundQuantity END ) 
/ SUM(CASE WHEN SA.FISCALYEAR = 2016 AND SA.FISCALWEEK = 22 
THEN SA.SalesQuantity-SA.RefundQuantity END ))-1 
AS 'SaleQTY_Var'

如何将结果作为小数而不是INT返回?

3 个答案:

答案 0 :(得分:2)

Int/Int = Int因此将 numerator 分母更改为Decimal值以获得带小数值的结果。我将分子乘以1.0将其转换为十进制

(SUM(CASE WHEN SA.FISCALYEAR = 2017 AND SA.FISCALWEEK = 22 
THEN SA.SalesQuantity-SA.RefundQuantity * 1.0 END ) 
/ 
SUM(CASE WHEN SA.FISCALYEAR = 2016 AND SA.FISCALWEEK = 22 
THEN SA.SalesQuantity-SA.RefundQuantity END ))-1 
AS 'SaleQTY_Var'

答案 1 :(得分:0)

只需在计算后转换值

CONVERT(DECIMAL(18, 4)
        (SUM(CASE WHEN SA.FISCALYEAR = 2017 AND SA.FISCALWEEK = 22 
THEN SA.SalesQuantity - SA.RefundQuantity END )*1.0 
/ SUM(CASE WHEN SA.FISCALYEAR = 2016 AND SA.FISCALWEEK = 22 
THEN SA.SalesQuantity - SA.RefundQuantity END )) - 1 
       ) AS SaleQTY_Var

答案 2 :(得分:0)

另一种使用CAST方法将一个操作数转换为十进制类型

的方法
CAST(
    (SUM(CASE WHEN SA.FISCALYEAR = 2017 AND SA.FISCALWEEK = 22 
         THEN SA.SalesQuantity-SA.RefundQuantityEND) AS DECIMAL) 
/ 
SUM(CASE WHEN SA.FISCALYEAR = 2016 AND SA.FISCALWEEK = 22 
    THEN SA.SalesQuantity-SA.RefundQuantity END )) - 1 
AS 'SaleQTY_Var'