2016-03-24 15 views
0

Ben PackingList başına öğeler ve PackingList için WeightInGramms sayısı ile tüm PackingLists bir listesini istiyorum üç tablesSQL Server'daki ilişkilendirme tablosuyla sorgudaki kayıtları nasıl sayılır?

PackingLists 
ItemsToPackingLists 
Items 

var.

Aşağıdaki sorguyu yazdım, ancak yanlış sonuçlar veriyor. Sanırım joins'u bir şekilde farklı ayarlamalıyım.

Sorguyu yeniden gözden geçirme konusunda yardım alabilirsiniz.

SELECT p.ID, 
     p.NameOfPackingList, 
     COUNT(ItemsToP.ItemID) AS NumberOfDifferentItems, 
     SUM(items.WeightInGrams * ItemsToP.Quantity) AS WeightInGramms 

FROM PackingLists AS p 
LEFT OUTER JOIN ItemsToPackingLists AS ItemsToP 
    ON (ItemsToP.PackingListID = p.ID) 
LEFT OUTER JOIN Items AS items 
    ON (ItemsToP.ItemID = items.ID) 
GROUP BY p.ID,p.NameOfPackingList 
+2

Lütfen sorunuzunuzu düzenleyin ve elde ettiğiniz yanlış sonuçlara dair örnekler verin (hem örnek veriler hem de sonuçlar). Sorgu doğru görünüyor. –

+0

** Farklı ** öğelerin sayısını arıyorsanız, o zaman "COUNT (DISTINCT ItemsToP.ItemID)" –

+0

@ Tom. . . Her ne kadar mümkün olsa da, 'ItemsToPackingLists'' nin bir 'Quantity' sütununun olması olası görünmemektedir. –

cevap

1

Ne almak istediğinizi değil, kontrol etmek için iki seçenek temizleyin.

  1. kullanın COUNT, siz (adedi değişken olan) bir paket içinde iki kez aynı öğenin dahil olabilir yerine COUNT (Farklı ItemsToP.ItemID) (ItemsToP.ItemID) ve col 'NumberOfDifferentItems' adlandırma farklı kullanmanızı öneririz de.
  2. Ancak, sorunuz 'PackagingList Başına öğe sayısı'. Anladığım kadarıyla, ID'leri saymak yerine, SUM (ItemsToP.Quantity) miktarlarını toplamalısınız.
İlgili konular