从SQL Server查询中在Access中格式化数字

时间:2013-12-21 12:45:55

标签: sql ms-access formatting sql-view

我有一个生产数据库,它使用SQL服务器后端,表格链接到Access前端。出于性能原因,我试图将大多数报表查询编写为SQL视图,并简单地从Access传递参数。

我遇到的问题是我似乎不允许格式化在SQL视图中计算的字段。

例如,我有一张桌子:

CaseLot    Drums    GrossWeight    %H2O
   01        10       10,301       5.21

Drums,GrossWeight和Drums都是十进制数据类型,但每个都有不同的比例。

在我看来,我包括上表中的值,还包括以下计算字段:

[GrossWeight] - 19.6*[Drums] AS NetWeight
([GrossWeight] -19.6*[Drums])*(100-[%H2O])/100 AS DryWeight

当我将这些计算字段拉到Access时,我没有格式化NetWeight字段的问题,但它不会让我为DryWeight字段。这真的很令人沮丧,因为我想将DryWeight字段只显示两位小数,而且不会这样做。

我也尝试在Access中应用Round()函数,但是当我包含一个舍入到的缩放时,它似乎给了我一个“循环引用”错误。 Round(DryWeight)用于将其舍入到0位小数,但Round(DryWeight,2)给出了一个错误。

这里发生了什么?

1 个答案:

答案 0 :(得分:3)

  

几乎就像Access将这些计算出的数字识别为字符串一样。

是的。我使用SQL Server 2005和Access 2010重新创建了这个问题。我在SQL Server中有一个名为[CaseLotView]的视图......

CREATE VIEW [dbo].[CaseLotView]
AS
SELECT
    CaseLot, 
    Drums, 
    GrossWeight, 
    [%H2O], 
    GrossWeight - 19.6 * Drums AS NetWeight, 
    (GrossWeight - 19.6 * Drums) * (100 - [%H2O]) / 100 AS DryWeight
FROM
    dbo.CaseLotData

...当我在Access中创建链接表并打开它时,我看到以下内容:

AccessView.png

请注意,[NetWeight]值右对齐(解释为数字),而[DryWeight]值左对齐(解释为字符串)。

一种解决方法是根据链接表创建一个Access查询,该表使用CDbl()函数将[DryWeight]转换为数字:

SELECT 
    dbo_CaseLotView.CaseLot, 
    dbo_CaseLotView.NetWeight, 
    CDbl([DryWeight]) AS dblDryWeight
FROM dbo_CaseLotView;

基于该查询的报告会将[dblDryWeight]识别为数字并提供预期的格式选项。

(请注意,虽然VBA中有CDec()函数但它在Access查询中不起作用 - 参考:here。)