Sql 将整数转换成十进制
表中的两列都是INT、SA.SalesQuantity和SA.returnQuantity 我想利用以下案例陈述计算出2107年和2016年之间的差异: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
(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将文本转换为数字等。