2015-12-25 43 views
-1

我對Northwind的SQL Server示例數據庫的問題,我不知道如何解決它更多幫助羅斯文示例SQL

顯示CustomerID誰擁有至少三種不同的產品從所有訂單的所有客戶,但從來沒有訂購了同一類別的2種產品。

我不知道如何檢查「但從來沒有訂購2種產品來自同一類別」

請幫我:) 代碼我想這個問題:

SELECT 
    c.CustomerID,COUNT(DISTINCT p.ProductID) 
FROM 
    Customers c 
JOIN 
    Orders o ON o.CustomerID = c.CustomerID 
JOIN 
    [Order Details] od ON od.OrderID = o.OrderID 
JOIN 
    Products p ON p.ProductID = od.ProductID 
GROUP BY 
    c.CustomerID 
HAVING 
    COUNT(DISTINCT p.ProductID) >= 3 

我已經一直困在這些查詢幾個小時,請幫助傢伙!

這是鏈接Northwind示例數據庫:https://northwinddatabase.codeplex.com/

回答

0

再添加一個條件來檢查不同產品的數量是否等於不同類別的數量。這確保了每個類別始終有且僅有一個產品。

SELECT 
c.CustomerID,COUNT(DISTINCT p.ProductID), count(distinct c.categoryid) 
FROM Customers c 
JOIN Orders o ON o.CustomerID = c.CustomerID 
JOIN [Order Details] od ON od.OrderID = o.OrderID 
JOIN Products p ON p.ProductID = od.ProductID 
GROUP BY c.CustomerID 
HAVING COUNT(DISTINCT p.ProductID) >= 3 
and count(distinct c.categoryid) = COUNT(DISTINCT p.ProductID) 
+0

hi @vkp 對不起,在錯誤的問題..正確的是:「但從來沒有從同一類別訂購2產品 –

+0

是的,這意味着只能有一個產品從每個類別 –

+0

但如果我喜歡你說有2個類別,所以我需要刪除兩個而不保留一個(distanct),不是嗎? –

0

如果每個順序必須從一個不同的類別,然後COUNT(產品)應該是相同COUNT(類別)。這是從邏輯上處理它的一種方式,但毫無疑問還有其他解決方案。

+0

喜@Stidgeon,對不起,是錯誤的問題.. 正確的是:「但從來沒有訂購2種產品來自同一類別」 –