2012-10-11 11 views
5

Yanıtladığınız benzer soruları aramak için iyi bir 20 dakika harcadım ancak çoğu MS Access Veritabanları için belirtilmemiş.Birden çok sonuç üreten MS Access'e sahip Çoklu İç Bağlantılar. Gruplandırmaya ve toplamlamaya ihtiyaç var

Ne yazık ki SQL deneyimim çok sınırlıdır, bu yüzden bu konudaki girdilerinizi takdir ediyorum.

TestDB.zip neyi başarmaya çalıştığımı görmek için Access veritabanını bu bağlantıdan indirebilirsiniz. Ben başarmak istediğinizle

Bu görüntü MS Access 2003'te bir örnek olarak bir çok temel tablo kurulumunu göstermektedir:
enter image description here

Temelde ben Siparişleri gösterecektir bir SQL sorgusu çalıştırmak istediğiniz tüm İlgili tablolarda tutulan bilgiler.

Açıkçası, aşağıdaki gibi bir SQL sorgusu, istediğim gibi olmayan tekrarlanan bilgilerle birden fazla satır görüntüler.

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; 

Sonuçlar:
enter image description here

Temelde, her sipariş için malzemeler, saat ve faturaların her özetleyecek bir sorgu istiyorum. Ben istendiği gibi bu e-tabloda ürettiler şey burada görülebilir: Rakamlar her yerde var çünkü
enter image description here

Açıkçası, bu SQL İÇ KATILDI nedeniyle nedeniyle birden satırlara çalışmaz. Burada

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; 

Sonuçlar:
enter image description here

Birden SEÇ ifadeleri baktım ama bu MS Access desteklenen sanmıyorum

+0

Tablo yapılarını, örnek verileri ve sorgu sonuçlarını burada başka bir yerde saklanan bir .zip dosyası yerine göndermek daha kolay/tercih edilebilir olacaktır. .zip dosya bağlantısı başarısız olursa, bu bilgi anlamak zor bu bilgi eksik olacak. – Taryn

+0

Sadece bu değil, daha önce bu soruyu gönderdiniz ve daha sonra burayı sildiniz [here] (http://stackoverflow.com/questions/12819833/multiple-inner-joins-with-ms-access-producing-multiple-results-need gruplama) (sadece 10k +). Bir soruya cevap alamıyorsanız, yeni bir tane yeniden göndermediğini gözden geçirmeyi düşünün. – Taryn

+0

Bu yeni gönderme ile örnek Access DB ve tablo yapısını içeren zip dosyasını gönderdim. Eski gönderiyi sildim ve umuyoruz ki, iki yazıyla insanları karıştırmamak için yeniden gönderildim. – user1734790

cevap

3

Alt sorgular Aradığınız ne alacak :

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 

bazıları için Subquery Basics ve Surviving Subqueries görün daha iyi bilgi.

+0

Ohhhh bu neredeyse var .... SQL kodunu koydum, koşmaya başladım ve bir Parametre Değeri girmem isteniyor. Ben BÜYÜK çalışır ben toplam olsun üst satırından bölümünü kaldırırsanız ' SEÇ SumOfMaterialCost, AS (Sum SEÇ (WHERE M.OrderID = O.OrderID M gibi malzemelerden Sum (M.MaterialCost) SEÇ) Çalışma DAN (L.HoursTaken) L NEREDE L.OrderID = O.OrderID) OLARAK SumOfHoursTaken, AS Faturalar KAYNAKLANAN (Sum (I.InvoiceAmount SEÇ) OLARAK ben NEREDE I.OrderID = O.OrderID) Siparişler GELEN SumOfInvoiceAmount AS O ' ... ama yine de en azından referans için Sipariş No'ya ihtiyacım var. – user1734790

+0

Sorun değil. SELECT Orders.OrderID, Orders.OrderTitle'yi SELECT O.OrderID, O.OrderTitle olarak değiştirerek düzeltdim. Yardımın için çok teşekkür ederim. Bu büyük beğeni topluyor! – user1734790

+0

Bunun için üzgünüz. Yanıtımı gelecekteki kullanıcılar için uygun şekilde güncelledim. – mwolfe02

İlgili konular