【问题标题】:How to "count" two different criteria from the same column in a table?如何从表中的同一列中“计算”两个不同的标准?
【发布时间】:2019-06-19 18:22:47
【问题描述】:

我正在尝试编写一个按天分组的简单查询,用当天的“有效”和“运行”点的计数填充一列,并用所有“有效”点的计数填充另一列。所以结果列将是:“Day”、“RunNum”、“TotalNum”。它从包含“TheDate”、“Running”和“ValidPoint”列的表中读取。

我可以通过更改“FROM”语句来单独创建“RunNum”和“TotalNum”列以适应列的特定条件。但是,我是一个完整的 SQL 初学者,我需要一些关于如何从一个表中读取两个不同标准的指导。

这是我为创建 RunNum 所写的:

SELECT TheDate AS Day, count(Running) AS RunNum
FROM Source_Table
WHERE Running = "Runtime" AND ValidPoint = "yes"
GROUP BY TheDate;

这就是创建 TotalNum:

SELECT TheDate AS Day, count(Running) AS TotalNum
FROM Source_Table
WHERE ValidPoint = "yes"
GROUP BY TheDate;

我曾尝试使用this post 中概述的 SUM(CASE WHEN...) 方法,但是当我尝试运行它时它一直抛出语法错误消息:

SELECT TheDate As Day, SUM(CASE WHEN Running = "Runtime" THEN 1 ELSE 0 END) AS RunNum, COUNT(Running) AS TotalNum
FROM Source_Table
WHERE ValidPoint = "yes"
GROUP BY TheDate;

我怀疑我需要在 from 语句中使用表“别名”,但到目前为止我所读到的关于它们的所有内容都令人困惑。对于进一步研究的正确方向的任何帮助或指导将不胜感激。感谢您抽出宝贵时间阅读本文!

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    在 MS Access 中,条件聚合使用 IIF() 而不是 CASE

    SELECT TheDate As Day,
           SUM(IIF(Running = "Runtime", 1, 0)) AS RunNum,
           COUNT(*) AS TotalNum
    FROM Source_Table
    WHERE ValidPoint = "yes"
    GROUP BY TheDate;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-09-14
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多