2015-12-25 2 views
-1

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

  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/

+0

показать нам что вы пробовали до сих пор! –

+0

для 1) ВЫБЕРИТЕ CustomerID, p.ProductID, ProductName, CategoryID FROM (Приказы о присоединиться к [Order Details] спосо ON o.OrderID = od.OrderID) присоединиться продукты р на od.ProductID = p.ProductID только присоединиться .. я не понял, как сделать проверки –

+0

Пожалуйста, ** ** не ** положить образцы кода или образцы данных в комментарии - так как вы не можете отформатировать его, это очень сложно ** читать его .... Вместо этого: ** обновите ** свой вопрос, отредактировав его, чтобы предоставить дополнительную информацию! Спасибо. –

ответ

1

Для # 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) 
+0

, и если i хотите сделать это, не зная, что существует 8 категорий? –

+0

@EladJarby: тогда просто используйте 'SELECT COUNT (*) FROM dbo.Categories' вместо –

+0

спасибо, много друг! –

-2

Это работает на вопрос # 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 
; 
+2

Определите «правильный». Почему это правильно? Также: Пожалуйста, старайтесь избегать колпачков в будущем. Кроме того, [пожалуйста, не размещайте свой код как изображение.] (// meta.stackoverflow.com/q/285551) – FrankerZ

+1

Привет, Nestam и приветствуем Stack Overflow. вы можете видеть, что редактирование Seth для вашего ответа превращает его в более полезный стиль, соответствующий этому сайту, - но ему также нужны некоторые дополнительные сведения. Можете ли вы отредактировать ответ, чтобы объяснить, почему этот код верен, и как он решает проблему участника? –

Смежные вопросы