Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 同一查询中基于不同条件的多个计数表达式_Sql_Ms Access - Fatal编程技术网

Sql 同一查询中基于不同条件的多个计数表达式

Sql 同一查询中基于不同条件的多个计数表达式,sql,ms-access,Sql,Ms Access,我试图根据Access中一个表中的数据创建一个摘要,但有一些预期的问题,希望有人能够解决 表1如下所示 Region || Case ID || Tasked || Visited 对于每个区域,我想显示三个字段 总计列(案例ID的计数) 已完成任务总数(其中已完成任务=是) 总访问量(其中总访问量=是) 创建Total列很好,但是,一旦我开始添加WHEREclauses=Yes,我显然会丢失Total列中的数据。有办法解决这个问题吗?使用以下方法: SUM(ABS(Tasked))作为Tot

我试图根据Access中一个表中的数据创建一个摘要,但有一些预期的问题,希望有人能够解决

表1如下所示

Region || Case ID || Tasked || Visited
对于每个区域,我想显示三个字段

  • 总计列(案例ID的计数)
  • 已完成任务总数(其中已完成任务=是)
  • 总访问量(其中总访问量=是)
  • 创建Total列很好,但是,一旦我开始添加
    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