如何使用针对iSeries AS/400数据库的T-SQL将两个整数值的除法转换为十进制?

Eri*_*air 1 t-sql casting calculated-columns ibm-midrange

假设以下查询:

SELECT
    ID,
    COUNT(1) AS NumRecords,
    SUM(Quantity) AS TotalQty
    SUM(Quantity)/COUNT(1) AS Avg
FROM        SOME_TABLE
GROUP BY    ID
Run Code Online (Sandbox Code Playgroud)

现在它返回:

ID    NumRecords    TotalQty    Avg
1     15            6           2
Run Code Online (Sandbox Code Playgroud)

我希望它返回一个小数为2的十进制值Avg(即"2.5").

我尝试CAST将计算作为DECIMAL,NUMERIC,FLOAT和VARCHAR,但它总是返回一个INTEGER.

Mar*_*ith 6

您需要将输入转换为计算而不是结果.还有什么理由你没有使用这个AVG功能?

AVG(CAST(Quantity as decimal(10,2)))
Run Code Online (Sandbox Code Playgroud)


ejc*_*ejc 5

另一种解决方案是通过隐式转换。我发现这也是一种更简洁的SQL。精度将由乘以1时使用的尾随零的数目确定。

AVG(Quantity * 1.00)   //x.xx
AVG(Quantity * 1.0000) //x.xxxx
Run Code Online (Sandbox Code Playgroud)