最近我们遇到了一个报告生成问题,其中聚合 (SUM()
) 是对 varchar 值执行的。
这些值是存储的工时,它们是整数值,例如:456.9。
由于我们正在进行维护,因此无法更改表格设计。
经过一些研究后,我通过添加一些显式转换来修改查询。
select ts.changedto as CHANGEDSTATE,
cast(sum(coalesce(cast(trim(tw.estimatedhours) AS DECIMAL(5,2)),0)) AS UNSIGNED) as ESTIMATEDHOURS,
cast(sum(coalesce(cast(trim(tw.actualhours) AS DECIMAL(5,2)),0)) AS UNSIGNED) as ACTUALHOURS
from tstatechange ts
left outer join tworkitem tw on (ts.workitemkey=tw.workitemkey)
left outer join tprojcat pc on (tw.prOJCATKEY = pc.pKEY)
where (ts.changedto = '8') and ts.lastedit between '2012-02-01 00:00:00' and '2012-02-28 23:59:59'
and pc.projkey = 39 group by CHANGEDSTATE;
甚至这个查询也返回了错误的值。 例如对于这些值手动求和
(89.35
96
11.15
0
0.1
92
1
609.05
61.25
0.5
1
0.5)
产生 961.9 但查询返回 963。 谁能帮我解决这个问题。是否有任何特殊功能或任何其他解决方法?
最佳答案
我认为您的查询存在四舍五入的问题。那两个 0.5 可能变成两个 1。给963.你用的是什么数据库?
关于mysql - 转换为十进制的 varchar 的聚合没有给出正确的答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9603858/