2013-08-11 2 views
0

다음은 SQL이지만 나에게 오류 제공 :제품을 그룹화 한 다음 TSQL의 날짜 desc로 정렬하려면 어떻게합니까?

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 

편집 : 여기에 내가 점점 오전 오류입니다 :

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 BYgroup by에 존재하지 않는 u.dateEntered 열입니다.

+0

답장을 보내 주셔서 감사합니다. 실제로 문제가있는 DateEntered 열입니다. 다음은 오류입니다. "dbo.UserXProduct.DateEntered"열은 집계 함수 또는 GROUP BY 절에 포함되어 있지 않으므로 ORDER BY 절에 잘못되었습니다. – Shuaib

+0

글쎄, 문제는 내가 DateEntered를 Group에 추가하면 결과가 예상과 다르다는 것입니다. 내가 원한 것은 최근의 베스트셀러 주문입니다. – 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