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

发布于 2024-12-09 06:15:52 字数 421 浏览 1 评论 0原文

假设以下查询:

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 的 Scale 为 2 的十进制值(即“2.5”)。

我尝试将计算转换为 DECIMAL、NUMERIC、FLOAT 和 VARCHAR,但它始终返回 INTEGER。

Assuming the following query:

SELECT
    ID,
    COUNT(1) AS NumRecords,
    SUM(Quantity) AS TotalQty
    SUM(Quantity)/COUNT(1) AS Avg
FROM        SOME_TABLE
GROUP BY    ID

Right now it returns:

ID    NumRecords    TotalQty    Avg
1     15            6           2

I want it to return a decimal value with a Scale of 2 for Avg (i.e. "2.5").

I've tried to CAST the calcluation as a DECIMAL, NUMERIC, FLOAT, and VARCHAR, but it always returns an INTEGER.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

橙味迷妹 2024-12-16 06:15:52

您需要将输入转换为计算而不是结果。还有什么原因您不使用 AVG 功能?

AVG(CAST(Quantity as decimal(10,2)))

You need to cast the inputs to the calculation not the result. Also any reason you aren't using the AVG function?

AVG(CAST(Quantity as decimal(10,2)))
箜明 2024-12-16 06:15:52

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

AVG(Quantity * 1.00)   //x.xx
AVG(Quantity * 1.0000) //x.xxxx

An alternative solution is via implicit Casting. I found this to be much cleaner SQL as well. The precision will be determined by the number of trailing zeros used when multiplying by 1.

AVG(Quantity * 1.00)   //x.xx
AVG(Quantity * 1.0000) //x.xxxx
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文