2010-09-01 17 views
1

Il y a une requête qui demande des produits favoris qui est achetée par chaque coustomer. Je dois sélectionner et dans la première sélection j'ai choisi le nombre de produits que chaque client a acheté. dans l'autre sélectionnez je veux sélectionner le maximum de ces boughts pour chaque client. mais quand je veux sélectionner max (colonne de sélection précédente) il obtient et erreur et dit qu'il n'est pas défini quelqu'un peut m'aider à résoudre ce problème. Je suis très motivé pour résoudre le problème de cette façon, et je ne suis pas prêt à utiliser d'autres méthodes comme la création de vue ou quelque chose comme ça. quelqu'un peut me aider à ce sujet:Comment utiliser la fonction Max sur une autre colonne à partir d'un select

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 

cette partie qui est mentionné avec MAX (customer.numOftimecustomer) ** est la partie qui donne l'erreur et il est dit que le client de l'objet n'est pas défini. est-il un moyen de le résoudre sans vue? pourquoi est-ce de cette façon? puisque le client que j'ai défini n'est pas une table?

+0

quel est votre SGBDR? –

+0

comme je l'ai mentionné dans les balises, c'est Microsoft SQL Server 2008. – user435245

Répondre

2

voici ce que vous voulez:

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

Ce code ne fonctionne pas à cause de cette erreur: Sous-requête a retourné plus de 1 valeur. Ceci n'est pas autorisé lorsque la sous-requête suit =,! =, <, <= , >,> = ou lorsque la sous-requête est utilisée comme une expression. – user435245

+0

s'il vous plaît noter que j'ai besoin du maximum d'achat pour chaque personne. par exemple quelque chose comme ci-dessous * utilisateur 1 produit 1 30 fois d'achat * utilisateur1 produit 2 30 fois d'achat * utilisateur2 produit 2 20 fois d'achat * dans ce cas nous saurons que chaque customre a quel produit préféré. – user435245

+0

avez-vous essayé ou c'est juste votre idée? –