我有一个用于工作项目的 Access 数据库,遗憾的是由于工作性质,我不能分享太多细节。但基本上我有一个需要执行的操作表,每个操作都有一个截止日期,我还有一个表,它使用以下逻辑来计算每个月有多少操作到期和已完成:
Group by Month([Due Date])
Count [Due Date]
对于一个查询,对于另一个查询中的完成日期也一样。然后我有一个最终查询,它使用到期日期查询、完成日期查询和月份表(否则空月份不会显示)。所以我有以下内容:
Nz(Due Dates Totals.Count,0)
Nz(Completed Dates Totals.Count,0)
Calendar.Month Number
Calendar.Month Name
(Nz
上面的 是为了确保我的报告中不留空格)
然后,我的报告使用月份编号进行排序和分组,使用月份名称向用户显示月份,并使用一张包含到期操作和总操作的小表格。然后,我在表格上设置了条件格式,这样如果已完成的操作少于到期操作,则以红色突出显示,如果它们相等,则以绿色突出显示,而已完成的操作多于到期操作,则“已完成”字段为蓝色。
这种方法很有效,除非其中一个数字是两位数,在这种情况下它只比较每个值的第一位数字,例如19 < 2
我尝试将字段中的值与查询本身的到期计数进行比较,并将其与报告字段中的值进行比较,它们都存在相同的问题。我猜是它们作为字符串而不是数字进行比较,但我不知道如何强制查询将计数存储为数字。
感谢您的帮助。(顺便说一句,数据库中还有更多表格等,Excel 不是完成这项工作的合适工具)。
答案1
如果 MS Access 将数值解释为字符串,则可以使用下列方法之一将字符串值强制转换为数值数据类型类型转换函数,选择哪一个显然取决于你的数据的性质:
CCur
(至货币)CDbl
(翻倍)CDec
(转为十进制)CInt
(到整数)CLng
(對長)CSng
(致单身人士)
由于您看起来要使用整数,CInt
因此如果您的值可能超过 32767(2 15 -1),我建议使用CLng
。
因此你的代码可能会变成:
CInt(Nz([Due Dates Totals].Count,0))
CInt(Nz([Completed Dates Totals].Count,0))
Calendar.[Month Number]
Calendar.[Month Name]
答案2
找到了解决方案,我乘以了Nz()
函数1
,强制它们是数字而不是字符串。
例如,而不是
Nz(Due Dates Totals.Count,0)
我用了
1 * Nz(Due Dates Totals.Count,0)