我为此查询使用了 AdventureworksLT2008R2 ,查询是
select p.Color, SUM(p.ListPrice) as total, pc.Name from SalesLT.Product p
inner join SalesLT.ProductCategory pc on p.ProductCategoryID=pc.ProductCategoryID
group by p.Color
go
目的是总结按颜色分组的每种产品的清单价格,例如
它应该显示为
------ + ----------- + --------- 颜色| ListPrice |名称 ------ + ----------- --------- + 红色| 100000 |自行车 黑色| 12000 |服装 ------------------------------
但是它给出了这个错误
Msg 8120, Level 16, State 1, Line 2
Column 'SalesLT.ProductCategory.Name' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
如果我没有内部联接,即没有名称列
select p.Color, SUM(p.ListPrice) as total from SalesLT.Product p
group by p.Color
代码可以正常工作,但内部连接失败了
为什么会发生这种错误,即使我认为逻辑没有错?以及如何解决这个问题?
感谢
答案 0 :(得分:2)
选择p.Color,SUM(p.ListPrice)作为total,pc.Name p.Color分组
您需要将pc.Name添加到GROUP BY语句,因为GROUP BY必须使SELECT子句中的所有列都不属于SUM,COUNT等聚合的一部分。