Sql 同一查询中基于不同条件的多个计数表达式
我试图根据Access中一个表中的数据创建一个摘要,但有一些预期的问题,希望有人能够解决 表1如下所示Sql 同一查询中基于不同条件的多个计数表达式,sql,ms-access,Sql,Ms Access,我试图根据Access中一个表中的数据创建一个摘要,但有一些预期的问题,希望有人能够解决 表1如下所示 Region || Case ID || Tasked || Visited 对于每个区域,我想显示三个字段 总计列(案例ID的计数) 已完成任务总数(其中已完成任务=是) 总访问量(其中总访问量=是) 创建Total列很好,但是,一旦我开始添加WHEREclauses=Yes,我显然会丢失Total列中的数据。有办法解决这个问题吗?使用以下方法: SUM(ABS(Tasked))作为Tot
Region || Case ID || Tasked || Visited
对于每个区域,我想显示三个字段
WHERE
clauses=Yes,我显然会丢失Total列中的数据。有办法解决这个问题吗?使用以下方法:
SUM(ABS(Tasked))作为TotalTasked
ABS
功能将-1
转换为1
Abs
的速度大约是IIf
的12倍!如果你有数千条记录,可能会有所不同。我对E Mett关于性能的测试结果很感兴趣,所以我尝试复制它们。不幸的是,我不能
我对一个网络共享上的后端.accdb文件中有100万行的表运行了测试。我运行了三个测试(每次重新加载前端.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秒
SELECT
COUNT(*) AS TotalRows,
SUM(Abs(Tasked)) AS TaskedRows
FROM TestData
根据这些结果,SUM(Abs())
可能比SUM(IIf())
稍微快一点,但肯定不会快12倍
如果速度是一个问题,并且你有远见在[Tasked]字段中添加索引,那么真正更快的方法将是
SELECT
DCount("*", "TestData") AS TotalRows,
DCount("*", "TestData", "Tasked=True") AS TaskedRows
试运行:2.1、3.5、2.3秒平均:2.6秒
一如既往,查询性能调优本身可能是一个有趣的游戏。您是否尝试过将
SUM(IIf(Tasked=True,1,0))作为TotalTasked
?这会起作用,但是,我不希望对所有真值求和,因为某些值=noi已将True改为“Yes”,并且有效fine@GordThompson你的答案是正确的!然而,我对ABS
和IIF
之间的效率差异进行了基准测试,发现ABS
的速度快了12倍。@EMett I无法重现您的结果。请参阅下面的答案了解详细信息。我打开了一个新问题来显示我的测试:没有函数调用<代码>总计(-Tasked)为TaskedRows