【问题标题】:MS Access SQL - Count if a field matches either of two criteriaMS Access SQL - 计算字段是否匹配两个条件之一
【发布时间】:2013-04-25 16:12:04
【问题描述】:

我有一个包含员工出勤详细信息的表格。对于此示例,我们假设只有三种不同的出勤类型:“假日”/“银行假日”/“病假”。

我可以毫无困难地找到每个员工的总数,但是我需要结合“假日”和“银行假日”的结果。


例如如果表包含以下数据:

约翰 - “假期”

约翰 - “银行假日”

约翰 - “疾病”

珍妮——“假期”


结果应该是

名称 - Days Sick - Days Holiday

约翰 - 1 - 2

珍妮 - 0 - 1

【问题讨论】:

    标签: sql ms-access count criteria


    【解决方案1】:

    您可以在 SUM 语句中使用IIF 来计算某些条件:

    SELECT  [YourTable].[Name],
            SUM(IIF([YourTable].[Attendance] = 'Sickness', 1, 0)) AS [Days Sick],
            SUM(IIF([YourTable].[Attendance] IN ('Holiday' , 'Bank-Holiday'), 1, 0)) AS [Days Holiday]
    FROM    [YourTable]
    GROUP BY [YourTable].[Name];
    

    【讨论】:

    • 做出了改变(两者都做了),我真的应该实践我所宣扬的,只是今天早上我说列引用应该始终使用别名以避免未来架构更改出现问题。
    • 无论我最终决定采用哪种方法,无论如何都会在 Access SQL 中使用 IIF 再次尝试。该项目相当庞大,并且将有助于使其以这种方式工作。
    【解决方案2】:

    我的两分钱价值:

    真的应该创建一个 [AbsenceCategories] 表,其值类似于...

    ,而不是将这种类型的分类硬编码到查询中
    AbsenceType     AbsenceCategory
    -----------     ---------------
    Sickness        Sick
    Holiday         Holiday
    Bank-Holiday    Holiday
    

    ...因此,当“最高管理层”向您发送备忘录,通知您必须单独跟踪“计划外缺勤”并将其归类为“假期”时,您只需将其添加到您的表格中,您无需更改您的所有查询等。

    【讨论】:

    • 感谢您的快速回复,明天上班时会尝试一下。我最初的方法与 Gareth 的回答相同,似乎 Access 不接受 SQL 语句中的 IIF,但我很可能犯了一些其他小的语法错误。但是,我可能会选择 Gord 的方法。给出的例子是从实际情况高度简化的(确实缺勤和生病已经分开处理了)。
    【解决方案3】:

    你想要一个条件聚合,比如:

    select name,
           sum(iif(which = 'Sickness', 1, 0)) as SickDays,
           sum(iif(which = 'Holiday' or which = 'Bank Holiday', 1, 0)) as Holiday
    from t
    group by name
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多