我有一个生产数据库,它使用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)给出了一个错误。
这里发生了什么?
答案 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中创建链接表并打开它时,我看到以下内容:
请注意,[NetWeight]值右对齐(解释为数字),而[DryWeight]值左对齐(解释为字符串)。
一种解决方法是根据链接表创建一个Access查询,该表使用CDbl()
函数将[DryWeight]转换为数字:
SELECT
dbo_CaseLotView.CaseLot,
dbo_CaseLotView.NetWeight,
CDbl([DryWeight]) AS dblDryWeight
FROM dbo_CaseLotView;
基于该查询的报告会将[dblDryWeight]识别为数字并提供预期的格式选项。
(请注意,虽然VBA中有CDec()
函数但它在Access查询中不起作用 - 参考:here。)