Sql 将整数转换成十进制

Sql 将整数转换成十进制,sql,sql-server,casting,decimal,Sql,Sql Server,Casting,Decimal,表中的两列都是INT、SA.SalesQuantity和SA.returnQuantity 我想利用以下案例陈述计算出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

表中的两列都是INT、SA.SalesQuantity和SA.returnQuantity

我想利用以下案例陈述计算出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'

如何将结果返回为十进制而不是整数?

只需在计算后转换值:

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

只需在计算后转换值:

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

Int/Int=Int
因此,将分子或分母更改为十进制值,以获得具有十进制值的结果。我将分子乘以
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'

Int/Int=Int
因此,将分子或分母更改为十进制值,以获得具有十进制值的结果。我将分子乘以
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'

另一种方法是使用
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'

另一种方法是使用
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'

这是一个完美的工作方式,有点像我在Excel中使用的逻辑,可以使用*0将文本转换为数字等。这是一个完美的工作方式,有点像我在Excel中使用的逻辑,可以使用*0将文本转换为数字等。