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-您应该只需要将一个输入转换为小数点即可,以避免整数除法使返回类型更可预测。