【问题标题】:Query to Count values from different columns查询以计算来自不同列的值
【发布时间】:2015-08-08 09:32:05
【问题描述】:

我正在寻找一个不能在 Access 中工作的查询,它可以为我提供完成某些要求的用户总数。我知道我可以按列分组,“棘手”的部分是,如果用户完成了 B、C 或 D 列中的任何要求,我需要在一个列中分组。换句话说,这是我的数据:

User    Company A   B   C   D   E
John    ABC     1               1
Bob     ABC     1   1   1       1
Reggie  ABC             1   1   1
Alex    BCA     1               
Mary    BCA     1   1       
Jane    CBA     1   1   1   1

这是我正在寻找的最终结果:

Company A   E   F(B or C or D)
ABC     2   3   2
BCA     2   0   1
CBA     1   0   1

【问题讨论】:

    标签: sql ms-access ms-query


    【解决方案1】:

    您可以使用 NZ(SQL 中的 COALESCE)将空值设为 0,然后您就可以进行“正常”工作——就像在本例中添加它们一样:

     SELECT SUM(NZ(B,0)+NZ(C,0)+NZ(D,0)) AS F
    

    或者看你的逻辑

     SELECT SUM(IIF(NZ(B,0)+NZ(C,0)+NZ(D,0) > 0,1,0) ) AS F
    

    (nb,如果 SQL 中的 IIF 将使用 CASE WHEN THEN END)

    【讨论】:

      【解决方案2】:

      你会使用group by:

      select Company,
             nz(SUM(A), 0) as A, nz(SUM(E), 0) as E,
             (nz(SUM(B), 0) + nz(SUM(C), 0) + nz(SUM(D), 0) ) as F
      from table
      group by Company;
      

      编辑:

      Hogan 的观点很好,很容易融入:

      select Company,
             nz(SUM(A), 0) as A, nz(SUM(E), 0) as E,
             (nz(MAX(B), 0) + nz(MAX(C), 0) + nz(MAX(D), 0) ) as F
      from table
      group by Company;
      

      【讨论】:

      • 我认为他只想将 B、C 或 D 的存在数计为每行 1 个。您的代码会在第一行给出 4 而不是 2。
      猜你喜欢
      • 1970-01-01
      • 2014-09-02
      • 1970-01-01
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 2017-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多