2010-09-01 4 views
1

Существует запрос, который запрашивает любимые продукты, которые купят каждый кустомер. я должен выбрать, и в первом выборе я выбрал количество продуктов, которые каждый клиент купил. в другом выберите, я хочу выбрать максимум этих boughts для каждого customer.but, когда я хочу выбрать max (предыдущий столбец выбора), он получает и ошибку и говорит, что он не определен, может ли кто-нибудь помочь мне решить эту проблему. я очень мотивирован, чтобы решить проблему с этого пути, и я не желаю использовать другие методы, такие как создание представления или что-то в этом роде. Может ли один помочь мне в этом:Как использовать функцию Max в другом столбце от выбора

SELECT INN.Maximum,INN.Name, customer.ProductName from 
(SELECT ContactName, ProductName, COUNT([Order Details].Quantity) AS NumOftimeCustomer 
FROM Orders, [Order Details], Products, Customers 
WHERE [Order Details].OrderID = Orders.OrderID 
AND [Order Details].ProductID = Products.ProductID 
AND Orders.CustomerID = Customers.CustomerID 
GROUP BY ContactName, ProductName)customer 
INNER JOIN 
(SELECT Customers.ContactName AS Name, **MAX(customer.numOftimecustomer)** AS Maximum 
from Customers, customer 
GROUP BY Customers.ContactName) INN 
ON INN.Name = customer.ContactName AND INN.Maximum = customer.NumOftimeCustomer 

та часть, которая упоминается с MAX (customer.numOftimecustomer) ** это та часть, которая дает ошибку и говорит, что объект клиента не определен. есть ли способ решить это без взгляда? почему так? поскольку клиент, которого я определил, не является таблицей?

+0

что ваша РСУБД? –

+0

, как я упоминал в тегах, это Microsoft SQL Server 2008. – user435245

ответ

2

вот что вы хотите:

select 
    * 
from (SELECT ContactName, ProductName, COUNT([Order Details].Quantity) AS NumOftimeCustomer 
    FROM Orders, [Order Details], Products, Customers 
    WHERE [Order Details].OrderID = Orders.OrderID 
    AND [Order Details].ProductID = Products.ProductID 
    AND Orders.CustomerID = Customers.CustomerID 
    GROUP BY ContactName, ProductName)customer 
where customer.num = (select max(num) from 

(SELECT ContactName, ProductName, COUNT([Order Details].Quantity) AS NumOftimeCustomer 
    FROM Orders, [Order Details], Products, Customers 
    WHERE [Order Details].OrderID = Orders.OrderID 
    AND [Order Details].ProductID = Products.ProductID 
    AND Orders.CustomerID = Customers.CustomerID 
    GROUP BY ContactName, ProductName)customer2 
where customer2.name = customer.name) 
+0

Этот код не работает из-за этой ошибки: Подзапрос возвратил более 1 значения. Это недопустимо, когда подзапрос следует =,! =, <, <= , >,> = или когда подзапрос используется как выражение. – user435245

+0

обратите внимание, что мне нужен максимум для каждого индивидуума. например, ниже * пользователь 1 продукт 1 30 раз покупка * пользователь1 товар 2 30 раз покупка * потребитель2 товар 2 20 раз покупка * в этом случае мы будем знать, что каждый пользовательский тип имеет какой любимый продукт. – user435245

+0

Вы попробовали это или его только свою идею? –