2012-10-11 33 views
5

Tôi đã dành 20 phút để tìm kiếm các câu hỏi tương tự được trả lời nhưng hầu hết không được chỉ định cho Cơ sở dữ liệu MS Access.Nhiều kết nối bên trong với MS Access tạo nhiều kết quả .. cần nhóm và tổng số

Rất tiếc, trải nghiệm SQL của tôi rất hạn chế vì vậy tôi sẽ đánh giá cao ý kiến ​​của bạn về vấn đề này.

Bạn có thể tải xuống Cơ sở dữ liệu Access từ liên kết này tại đây để xem những gì tôi đang cố gắng hoàn thành TestDB.zip.

Hình ảnh này cho thấy một thiết lập bảng rất cơ bản là một ví dụ trong MS Access 2003 về những gì tôi mong muốn đạt được:
enter image description here

Về cơ bản tôi muốn chạy một truy vấn SQL mà sẽ hiển thị các đơn đặt hàng với tất cả các thông tin được lưu trữ trong các bảng có liên quan.

Rõ ràng, một truy vấn SQL như truy vấn dưới đây sẽ hiển thị nhiều hàng với thông tin lặp lại không phải là những gì tôi muốn.

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; 

Kết quả:
enter image description here

Về cơ bản, tôi muốn có một truy vấn mà sẽ tổng hợp mỗi của các thành phần, giờ và hoá đơn cho từng đơn đặt hàng. Một cái gì đó tôi đã được sản xuất trong bảng tính này như mong muốn có thể được nhìn thấy ở đây:
enter image description here

Rõ ràng, SQL này không làm việc vì con số này ở khắp mọi nơi do nhiều hàng do các bên tham gia.

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; 

Kết quả ở đây:
enter image description here

tôi đã xem xét nhiều câu SELECT nhưng tôi không nghĩ rằng đây là những hỗ trợ trong MS Access

+0

Sẽ dễ dàng hơn/thích hợp hơn khi đăng cấu trúc bảng, dữ liệu mẫu và kết quả truy vấn ở đây thay vì trong tệp .zip được lưu trữ ở nơi khác. Nếu liên kết tệp .zip không thành công, thì thông tin này sẽ bị thiếu khiến câu hỏi này khó hiểu. – Taryn

+0

Không chỉ vậy, nhưng trước đây bạn đã đăng câu hỏi này và sau đó xóa nó [ở đây] (http://stackoverflow.com/questions/12819833/multiple-inner-joins-with-ms-access-producing-multiple-results-need -nhóm) (chỉ 10k +). Nếu bạn không nhận được câu trả lời cho một câu hỏi, hãy xem xét sửa đổi nó không đăng lại một câu hỏi mới. – Taryn

+0

Tôi đã đăng tệp zip chứa ví dụ Access DB và cấu trúc bảng với bản trình bày mới này. Tôi đã xóa bài đăng cũ và gửi lại để hy vọng không làm người khác nhầm lẫn với hai bài đăng. – user1734790

Trả lời

3

các truy vấn con sẽ giúp bạn có được những gì bạn đang tìm kiếm :

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 

Xem Subquery BasicsSurviving Subqueries đối với một số thông tin tốt hơn.

+0

Ohhhh đây là gần như có .... Tôi đặt mã SQL trong, nhấn chạy và tôi được yêu cầu nhập một giá trị tham số. Nếu tôi loại bỏ các phần từ dòng trên cùng tôi nhận được tổng số mà làm việc GREAT 'SELECT (SELECT Sum (M.MaterialCost) TỪ Vật liệu AS M WHERE M.OrderID = O.OrderID) AS SumOfMaterialCost, (SELECT Sum (L.HoursTaken) TỪ LAO ĐỘNG LÀ L WHERE L.OrderID = O.OrderID) AS SumOfHoursTaken, (SELECT Sum (I.InvoiceAmount) TỪ Hóa đơn AS I WHERE I.OrderID = O.OrderID) AS SumOfInvoiceAmount TỪ Đơn đặt hàng AS O' ... nhưng tôi vẫn cần ít nhất Thứ tự số để tham chiếu. – user1734790

+0

OK. Tôi đã sửa nó bằng cách thay thế 'SELECT Orders.OrderID, Orders.OrderTitle' thành' SELECT O.OrderID, O.OrderTitle. Cảm ơn rất nhiều vì sự giúp đỡ của bạn. Nó được đánh giá ồ ạt! – user1734790

+0

Xin lỗi về điều đó. Tôi đã cập nhật câu trả lời của mình cho người dùng tương lai. – mwolfe02

Các vấn đề liên quan