【问题标题】:Counting Unique IDs In a LEFT/RIGHT JOIN Query in Access在 Access 的 LEFT/RIGHT JOIN 查询中计算唯一 ID
【发布时间】:2022-01-20 23:55:21
【问题描述】:

我正在开发一个数据库来跟踪员工的工作效率。我们这样做的两种方法是监控他们完成的订单数量和跟踪他们的错误率。

他们完成的每个订单都记录在一个表格中。一天之内,他们可以完成许多订单。 一个订单也可能有多个错误。

我正在尝试创建一个提供结果摘要的查询。此查询应该有一列包含“TotalOrders”,另一列包含“TotalErrors”。

我使用 LEFT/RIGHT 连接来连接两个表,因为并非所有订单都会出错。

当我想汇总订单数量时,问题就来了。如果有人在订单上犯了多个错误,则该订单会被计算多次;每个错误一次。

我想修改我的查询,以便在计算订单数量时只计算具有不同 OrderID 的记录;然而,在同一个查询中,也计算错误总数而不会丢失任何错误。

这可能吗?

这是我的 SQL

SELECT Count(tblTickets.TicketID) AS TotalOrders, 
       Count(tblErrors.ErrorID) AS TotalErrors 
FROM tblTickets 
LEFT JOIN tblErrors ON tblTickets.TicketID = tblErrors.TicketID;

我玩过 SELECT DISTINCT 和 UNION,但在 Access 中使用正确的语法时遇到了困难。此外,我看到的许多示例都试图以不同的方式汇总单个字段而不是两个字段。

为了清楚在汇总 OrderCount 字段时,我只想计算具有 DISTINCT TicketID 的记录。汇总 ErrorCount 字段时,我想计算所有错误。

票 = 订单。

Query Result: Order Count Too High

Ticket/Order Table: Total of 14 records

Error Table: You can see two errors for the same order on 8th

【问题讨论】:

  • LEFT JOIN 是如何工作的?在tblTickets 中,TicketID 列包含 ID,而在 tblErrors 中,它包含日期?此外,如果您在第一个表中计算不同的TicketID,您仍然会得到相同的结果,因为这些值确实不同。您对TotalOrders 的期望结果是什么?
  • 嗨,对不起,我的问题并不完全清楚。 tblErrors 中的 TicketID 字段是一个外键。该字段使用查找来使结果更易于阅读。但是,它仍然是一个整数值。不幸的是,正如您在图片中看到的那样,当前查询不起作用,因为它计算了不应该的记录。当订单有多个错误时,该订单的订单计数值会增加。例如,如果某人在 ID = 1 的订单上有 3 个错误,那么该订单将计为该人完成的三个订单(当它应该是 1 时)。

标签: sql ms-access left-join distinct


【解决方案1】:
  1. 执行一个查询,计算 Orders 表中员工的订单,以及一个查询 Errors 表中员工的错误,然后将这两个查询连接到 Staff 表(查询可以嵌套在一个长 SQL 语句中)

  2. 相关子查询

SELECT Staff.*, 
    (SELECT Count(*) FROM Orders WHERE StaffID = Staff.ID) AS CntOrders, 
    (SELECT Count(*) FROM Errors WHERE StaffID = Staff.ID) AS CntErrors
FROM Staff;
  1. 使用 DCount() 域聚合函数

选项 1 可能效率最高,选项 3 效率最低。

【讨论】:

    猜你喜欢
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2015-06-18
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2016-06-01
    相关资源
    最近更新 更多