SQL舍入从3位小数到2位小数

Mik*_*ebb 3 sql rounding ssrs-2008

我有一个SSRS 2008报告,其数据集运行一个返回计算列的SQL查询.此数据集填充报告中的表格.

计算列最多返回4位小数.我想舍入到最接近的2位小数.即8660.125应变为8660.13,1487.8521应变为1487.85

查询示例:

select [Hours] * [Rate] * [Complexity] * [Efficiency] from Hours
Run Code Online (Sandbox Code Playgroud)

我会在SQL查询而不是SSRS表中执行此舍入,因为我们试图保持表"非智能",因此我们可以将所有逻辑封装在SQL查询本身中.建议?

Eri*_*ikE 7

这里有两个问题.

首先是四舍五入.这可以通过RoundSQL中的函数轻松完成:

SELECT Round(8660.125, 2);
-- returns 8660.130
Run Code Online (Sandbox Code Playgroud)

第二,正如您所看到的,这仍然是小数点后的3位数.这是由于数据类型.你得到了你的舍入值,但它仍然显示一个额外的数字.

你可以这样修复:

SELECT Convert(decimal(16, 2), 8660.125);
--returns 8660.13 by implicitly rounding--you could round first but not needed
Run Code Online (Sandbox Code Playgroud)

但是,上述这两个值在数值上是相同的.在我看来,你根本不应该在SQL Server方面处理演示文稿.如果您想要两位小数,只需将SSRS报告中的单元格格式设置为#.00.这将确保您获得所需的(舍入的)小数位数,无论如何!没有必要的功能.只是一个简单的财产.

日期的原则是一样的.日期的基础值只是一个数字.但是有很多方法可以向用户显示日期 - 使用长名称或不同的部件顺序或使用不同的分隔符.每次更改日期格式时,您会一直回到SQL并改变您的Convert()风格吗?

您不希望SQL Server在报告中确定这些数字的字体,颜色,大小,填充,样式,位置或可见性.这些都必须在设计时手动设置.那么为什么值显示的方式(当值完全相等时)会有什么不同?在我看来,将其推入SQL查询会将关注区域转移到错误的位置.这就是在不需要存在的查询中添加复杂性(而不是"智能")!我也没有看到将单元格的数字格式设置为"添加智能".

这是一个表达问题,因此请将其保存在所有其他表示元素都要处理的适当位置 - SSRS报告.

更新

我可以想到一个场景,您希望在查询中执行转换,并且该值将在更多计算中进一步使用,并且有关所述计算的业务规则需要它.例如,如果您正在计算银行利息,他们可能会有一些规则,例如"在第1步之后到4位小数,然后在第3步之后最终舍入到2位小数(美元和美分)." 但这是一个不同的故事:现在价值很重要,而不仅仅是它的展示.