我正在尝试根据Access中一个表中的数据创建一个摘要,但是我希望有人可以解决一些预期的问题。
表1看起来像这样
Region || Case ID || Tasked || Visited
对于每个地区,我想展示三个领域。
创建总列很好,但是,一旦我开始添加WHERE
子句=是,我显然会丢失总列中的数据。有办法解决这个问题吗?
答案 0 :(得分:1)
我对E Mett关于性能的测试结果很感兴趣,所以我尝试重现它们。不幸的是,我不能。
我针对一个包含100万行的表运行测试,这些行驻留在网络共享上的后端.accdb文件中。我运行了三次测试(每次重新加载前端.accdb)并对结果进行平均。
SELECT
COUNT(*) AS TotalRows,
SUM(IIf(Tasked=True,1,0)) AS TaskedRows
FROM TestData
试运行:24.8,24.0,23.8秒
平均值:24.2秒
SELECT
COUNT(*) AS TotalRows,
SUM(Abs(Tasked)) AS TaskedRows
FROM TestData
试运行:22.3,23.8,24.9秒
平均:23.7秒
根据这些结果SUM(Abs())
可能会比SUM(IIf())
略快,但肯定不会快12倍。
如果速度是一个问题,你有远见在[任务]字段上放置一个索引,那么真正更快的方法就是
SELECT
DCount("*", "TestData") AS TotalRows,
DCount("*", "TestData", "Tasked=True") AS TaskedRows
试运行:2.1,3.5,2.3秒
平均值:2.6秒
与往常一样,查询性能调优本身就是一个有趣的游戏。
答案 1 :(得分:0)
使用以下内容:
SUM(ABS(Tasked)) AS TotalTasked
ABS
功能会将-1
转换为1
Abs
比IIf
快约12倍!如果您有数千条记录,则可能会有所不同。