【发布时间】: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