gpt4 book ai didi

sql - 与 MS Access 的多个内部联接产生多个结果..需要分组和总计

转载 作者:行者123 更新时间:2023-12-02 20:00:13 24 4
gpt4 key购买 nike

我花了 20 分钟寻找类似问题的答案,但大多数问题都没有针对 MS Access 数据库指定。

不幸的是,我对 SQL 的经验非常有限,因此非常感谢您对此的意见。

您可以从此链接下载 Access 数据库,看看我正在尝试实现什么目标 TestDB.zip

此图显示了一个非常基本的表设置,作为我希望实现的 MS Access 2003 中的示例:
enter image description here

基本上我想运行一个 SQL 查询,它将显示订单以及相关表中保存的所有信息。

显然,像下面这样的 SQL 查询将显示多行且信息重复,这不是我想要的。

SELECT Orders.OrderID, Orders.OrderTitle, Materials.Material, Materials.MaterialCost,
Labour.HoursTaken, Invoices.InvoiceAmount
FROM ((Orders INNER JOIN Labour ON Orders.OrderID = Labour.OrderID)
INNER JOIN Materials ON Orders.OrderID = Materials.OrderID)
INNER JOIN Invoices ON Orders.OrderID = Invoices.OrderID;

结果:
enter image description here

基本上,我想要一个查询来汇总每个订单的每种 Material 、工时和发票。我在此电子表格中根据需要生成的内容可以在此处看到:
enter image description here

显然,这个 SQL 不起作用,因为由于 INNER JOINS 导致了多行,数字到处都是。

SELECT Orders.OrderID, Orders.OrderTitle, Sum(Materials.MaterialCost) AS SumOfMaterialCost,
Sum(Labour.HoursTaken) AS SumOfHoursTaken,
Sum(Invoices.InvoiceAmount) AS SumOfInvoiceAmount
FROM ((Orders INNER JOIN Labour ON Orders.OrderID = Labour.OrderID)
INNER JOIN Materials ON Orders.OrderID = Materials.OrderID)
INNER JOIN Invoices ON Orders.OrderID = Invoices.OrderID
GROUP BY Orders.OrderID, Orders.OrderTitle;

结果在这里:
enter image description here

我查看了多个 SELECT 语句,但我认为 MS Access 不支持这些语句

最佳答案

子查询将为您提供所需的内容:

SELECT O.OrderID, O.OrderTitle, 
(SELECT Sum(M.MaterialCost) FROM Materials AS M
WHERE M.OrderID=O.OrderID) AS SumOfMaterialCost,
(SELECT Sum(L.HoursTaken) FROM Labour AS L
WHERE L.OrderID=O.OrderID) AS SumOfHoursTaken,
(SELECT Sum(I.InvoiceAmount) FROM Invoices AS I
WHERE I.OrderID=O.OrderID) AS SumOfInvoiceAmount
FROM Orders AS O

参见Subquery BasicsSurviving Subqueries获取更多有用信息。

关于sql - 与 MS Access 的多个内部联接产生多个结果..需要分组和总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12836956/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com