2 вопроса по Northwind SQL

У меня есть 2 вопроса о Northwind Пример базы данных SQL Server, который я не знаю, как решить

  1. Шоу CustomerID для всех клиентов, которые имеют как минимум три разных продукта, но никогда не используют оба продукта в одной категории.

    Код, который я пробовал для этого вопроса:

    SELECT 
        CustomerID, p.ProductID,ProductName, CategoryID
    FROM 
        (Orders o 
    JOIN 
        [Order Details] od ON o.OrderID = od.OrderID)
    JOIN
        Products p ON od.ProductID = p.ProductID
    
  2. Шоу CustomerID для клиентов, у которых есть заказы из всех категорий.

Я застрял на эти вопросы в течение нескольких часов, пожалуйста, помогите, ребята!

Это ссылка для Northwind Пример базы данных: https://northwinddatabase.codeplex.com/

2 ответа

Решение

Для #2 вы можете использовать что-то вроде этого:

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

Это работает для вопроса № 1:

SELECT c.CustomerID, 
    od.productid, 
    p.ProductName, 
    COUNT(od.productid), 
    ct.Category
FROM [Order Details] od

INNER JOIN [dbo].[Products] p on od.ProductID    = p.ProductID
INNER JOIN [dbo].[Categories] ct on p.CategoryID = c.CategoryID
INNER JOIN [dbo].[Orders] o on od.OrderID        = o.OrderID
INNER JOIN [dbo].[Customers] c on o.CustomerID   = c.CustomerID

GROUP BY od.productid,
         ct.CategoryID,
         p.ProductName,
         c.CustomerID
HAVING COUNT(od.productid) > 3
ORDER BY COUNT(od.productid) desc
;
Другие вопросы по тегам