繁体   English   中英

如何在数字格式和Access交叉表查询中显示两位小数?

[英]How do I format numbers in and Access crosstab query to show two decimal places?

我有一个访问交叉表查询,显示以下结果:

| SHORE_TYPE  | Total Miles | Class 1           | Class 2          | Class 4 |
| ONSHORE     | 31.37       | 0.337121212121212 | 12.4617424242424 | 0       |

我希望它显示以下结果。 请注意,“类别”列在此处显示两位小数:

| SHORE_TYPE  | Total Miles | Class 1 | Class 2 | Class 4 |
| ONSHORE     | 31.37       | 0.34    | 12.46   | 0.00    |

通过将“格式”和“小数位数”属性(在“设计”视图中)分别更改为“固定”和“ 2”,我已经能够配置“总里程”列。 但是,用于确定“类”列中值的查询列(在“设计视图”中)只有Format属性,我将其设置为“ Fixed”; 没有小数位数属性可供我调整。

我有一些类似的交叉表查询,这些查询以我想要的方式显示结果,但是我无法确定这两者之间的任何区别。 另外,有时我会看到一些查询以错误的方式显示它一次,然后以错误的方式显示它。

这使我想知道问题是否出在Access中的错误,还是我的代码中隐式定义了一些我应该明确定义的东西。

这是我的SQL:

TRANSFORM IIf(IsNull(Sum([qryPartL].[MILES_OF_PHYS_LENGTH])),0,
Sum([qryPartL].[MILES_OF_PHYS_LENGTH])) AS SumOfMILES_OF_PHYS_LENGTH
SELECT qryPartL.SHORE_TYPE, Sum(qryPartL.MILES_OF_PHYS_LENGTH) AS [Total Miles]
FROM qryPartL
GROUP BY qryPartL.SHORE_TYPE
PIVOT qryPartL.CLASS_LOC_text In ("Class 1","Class 2","Class 4");

编辑:关闭并重新打开此查询后,Total Miles列现在显示31.3714015 ...,并且我以前在Design View中为此列设置的属性现在为空。 因此,似乎Access不能始终保存这些属性设置。 至少不是在我使用它们的上下文中。

诀窍是使用一系列嵌套函数。

  • CDbl:将数据转换为双精度数字数据类型
  • FormatNumber:返回以指定精度格式化为数字的表达式(2)
  • Nz:当字段为空时返回指定值(0)
    • 如果值为Null,则CDbl函数将不起作用。

我还从TRANSFORM子句中删除了IIf函数,因为Nz在这种情况下效果更好。

这是返回所需结果的新SQL。 (我添加了新的行和缩进以使其更易于阅读。这不是必需的步骤,实际上Access可能不会记住它。)

TRANSFORM 

 CDbl(
    FormatNumber(
         Nz(
             Sum([qryPartL].[MILES_OF_PHYS_LENGTH])
         ,0)
     ,2)
 ) AS SumOfMILES_OF_PHYS_LENGTH

SELECT qryPartL.SHORE_TYPE, 

 CDbl(
    FormatNumber(
         Nz(
             Sum(qryPartL.MILES_OF_PHYS_LENGTH)
         ,0)
     ,2)
 ) AS [Total Miles]

FROM qryPartL
GROUP BY qryPartL.SHORE_TYPE
PIVOT qryPartL.CLASS_LOC_text In ("Class 1","Class 2","Class 4");

感谢Allen Browne和他出色的Access网站上的提示,使我得到了这个答案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM