2013-08-11 2 views
0

Вот SQL, но это дает мне ошибку:Как я могу группировать продукты, а затем сортировать их по дате в TSQL?

select u.productId, count(ProductID) as total, p.Name 
from dbo.UserXProduct AS u 
INNER JOIN dbo.product AS p ON u.ProductID = p.ID 
group by productid, p.name 
having count(ProductID) > 5 
order by u.dateEntered desc, total desc 

EDIT: Вот ошибка я получаю:

Column "dbo.UserXProduct.DateEntered" is invalid in the ORDER BY clause because it is not contained in either an aggregate function or the GROUP BY clause

ответ

0

Вы не можете ссылаться на псевдоним столбца в group by. Попробуйте вместо этого:

select u.productId, count(ProductID) as total, p.Name 
from dbo.UserXProduct AS u 
INNER JOIN dbo.product AS p ON u.ProductID = p.ID 
group by productid, p.name 
having count(ProductID) > 5 
order by count(ProductID) desc 

Вы не можете ORDER BY столбец u.dateEntered, если он не присутствует в group by.

+0

благодарит за ответ. Это столбец DateEntered, с которым у меня проблема. Вот Ошибка: Столбец «dbo.UserXProduct.DateEntered» недопустим в предложении ORDER BY, потому что он не содержится ни в агрегатной функции, ни в предложении GROUP BY. – Shuaib

+0

Ну, проблема в том, что если я добавлю DateEntered в группу, результат не будет тем, что я ожидаю. Все, что я хочу, это верхний заказ продавцов в последнее время. – Shuaib

1

Вы не можете заказать по u.dateEntered напрямую. Но, вы можете заказать по max(u.dateEntered). И это может быть то, что вы хотите для самых последних продуктов:

select u.productId, count(ProductID) as total, p.Name 
from dbo.UserXProduct AS u 
INNER JOIN dbo.product AS p ON u.ProductID = p.ID 
group by productid, p.name 
having count(ProductID) > 5 
order by max(u.dateEntered) desc, total desc