ssrs 2008 - SQL 从 3 位小数点舍入到 2 位小数



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

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

查询示例:

select [Hours] * [Rate] * [Complexity] * [Efficiency] from Hours

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

这里有两个问题。

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

SELECT Round(8660.125, 2);
-- returns 8660.130

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

您可以通过以下方式解决此问题:

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

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

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

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

这是一个演示文稿问题,因此请将其保留在解决所有其他演示文稿元素的适当位置 - SSRS 报告。

更新

我可以想到一种您希望在查询中执行转换的情况,那就是该值将在更多计算中进一步使用并且有关所述计算的业务规则需要它的时候。例如,如果您正在计算银行利息,他们可能会有诸如"步骤 1 之后四舍五入到小数点后 4 位,然后在步骤 3 之后最后四舍五入到小数点后 2 位(美元和美分)"这样的规则。但那是另一回事:现在价值很重要,而不仅仅是它的展示

尝试使用 CAST 之类的方法——它应该为您处理舍入。

SELECT CAST(col as DECIMAL(10,2))

这是SQL小提琴。

对于上面的示例查询,请使用:

select CAST([Hours] * [Rate] * [Complexity] * [Efficiency] as DECIMAL(10,2)) from Hours

祝你好运。

最新更新