2016-03-20 19 views
0
Ben MySQL ile ilgili bir sorun yaşıyorum

ilk üç sıra için bir çarpan vardır:SQL deyimi sonuçları Ben bir SQL deyimi var

Select Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice, 
     Sum(OrderDetails.Quantity) AS QuantityOrdered, Sum(Inventory.Quantity) AS QuantityOnHand 

From Products 
LEFT JOIN OrderDetails USING(ProductID) 
LEFT JOIN Inventory USING(ProductID) 

group by Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice; 

SQL deyimi ilk üç sıra dışında ince çalıştığını get get Sum(OrderDetails.Quantity) AS QuantityOrdered sütununda bir çarpan var. İlk satırın 4'lük bir çarpanı, ikincisi 3'lük bir çarpanı vardır ve üçüncü sıranın 2'den biri vardır. Diğer her satır sadece iyi ve Sum(Inventory.Quantity) AS QuantityOnHand sütun uygun sayıları döndürür, çarpan yoktur.

OrderDetails tablosundaki değerleri, ilk üç satıra kadar olan ProdcutID tablosuna düzenledim. Miktarları her biri için 1 olarak değiştirdim ve sırasıyla 4, 3 ve 2'yi aldım.

+0

bazı örnek verileri göstermek ve beklenen sonuçlara Can:

bu çözmek için tipik bir yolu, her boyut boyunca katılmadan önce toplamak için mi? – AKS

+0

'LEFT JOIN' üzerinden birden çok satırınız var, bahis yaparım. – dkarp

+0

3 tablo arasında çapraz ürün oluşturuyorsunuz. Bu nedenle, 'ProductID' olan' Envanter 'satırlarının sayısına göre' OrderDetails.Quantity 'değerini çarpar. – Barmar

cevap

1

Eğer ayrı sayımı() ihtiyaç böyle alt sorgu deneyin:

Select Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice 
, Sum(Quantity) AS QuantityOrdered 
, (select Sum(Quantity) from Inventory where ProductID = Products.ProductID) AS QuantityOnHand 
From Products JOIN OrderDetails USING(ProductID) 
group by Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice 
+0

İlk çözüm orada çalıştı –

1

Bir sonuçlanan iki farklı boyutta toplayarak gibidir:

Select Products.ProductID, Products.ModelNumber, Products.SerialNumber, Products.Description, Products.ListPrice 
, (select Sum(Quantity) from OrderDetails where ProductID = Products.ProductID) AS QuantityOrdered 
, (select Sum(Quantity) from Inventory where ProductID = Products.ProductID) AS QuantityOnHand 
From Products 

veya Sipariş sadece ürünlerini gerekiyorsa Her ürün için stok ve sipariş detaylarının Kartezyen ürünü - sum() ürününün kapalı olduğundan şüpheniz olmasın.

Select p.ProductID, p.ModelNumber, p.SerialNumber, p.Description, p.ListPrice, 
     od.QuantityOrdered, i.QuantityOnHand 
From Products p LEFT JOIN 
    (select od.ProductId, Sum(od.Quantity) as QuantityOrdered 
     from OrderDetails 
     group by od.ProductdId 
    ) od 
    USING (ProductID) LEFT JOIN 
    (select i.ProductId, Sum(Inventory.Quantity) as QuantityOnHand 
     from Inventory i 
     group by i.ProductId 
    ) i 
    USING (ProductID); 
+0

Bu çalışır, ancak bazı düzenleme gerekiyordu. Ürünleri ve bu gibi –

+0

@ PerLarsen ile p'yi değiştirin. . . Bununla ne demek istediğinden emin değilim. Tablo takma adları, yazmanın daha kolay yazılmasını ve okunmasını sağlar. –

İlgili konular