Tsql 如何在iSeries AS/400数据库上使用T-SQL将两个整数值的除法转换为十进制?
假设以下查询:Tsql 如何在iSeries AS/400数据库上使用T-SQL将两个整数值的除法转换为十进制?,tsql,casting,ibm-midrange,calculated-columns,Tsql,Casting,Ibm Midrange,Calculated Columns,假设以下查询: SELECT ID, COUNT(1) AS NumRecords, SUM(Quantity) AS TotalQty SUM(Quantity)/COUNT(1) AS Avg FROM SOME_TABLE GROUP BY ID 现在它返回: ID NumRecords TotalQty Avg 1 15 6 2 我希望它返回一个小数值,对于Avg(
SELECT
ID,
COUNT(1) AS NumRecords,
SUM(Quantity) AS TotalQty
SUM(Quantity)/COUNT(1) AS Avg
FROM SOME_TABLE
GROUP BY ID
现在它返回:
ID NumRecords TotalQty Avg
1 15 6 2
我希望它返回一个小数值,对于Avg
(即“2.5”),其刻度为2
我尝试将计算结果转换为十进制、数字、浮点和VARCHAR,但它总是返回整数。您需要将输入转换为计算结果,而不是结果。还有您不使用
AVG
功能的原因吗
AVG(CAST(Quantity as decimal(10,2)))
您需要将输入转换为计算,而不是结果。还有您不使用
AVG
功能的原因吗
AVG(CAST(Quantity as decimal(10,2)))
另一种解决方案是通过隐式转换。我发现这也比SQL更干净。精度将由乘以1时使用的尾随零的数量确定
AVG(Quantity * 1.00) //x.xx
AVG(Quantity * 1.0000) //x.xxxx
另一种解决方案是通过隐式转换。我发现这也比SQL更干净。精度将由乘以1时使用的尾随零的数量确定
AVG(Quantity * 1.00) //x.xx
AVG(Quantity * 1.0000) //x.xxxx
转换(总和(数量)为十进制(10,2)/转换(计数(1)为十进制(10,2))返回21位小数位的结果我需要对整个计算进行另一次转换。因此,要指定刻度,您需要对输入和整个计算进行转换。@Eric-您应该只需要将一个输入转换为
decimal
,以避免使返回类型更可预测的整数除法。转换(总和(数量)十进制(10,2)/CAST(计数(1)为十进制(10,2))返回小数点后21位的结果我需要对整个计算进行另一次转换。因此,要指定刻度,您需要对输入和整个计算进行转换。@Eric-您应该只需要将一个输入转换为小数点即可,以避免整数除法使返回类型更可预测。