选择列表中的列……无效,因为该列没有包含在聚合函数或 GROUP BY 子句中

     今天用SQL Server尝试实现一个SQL语句的时候,报了如标题所示的错误,通过在百度里面搜索,并亲自动手实现,终于发现问题所在,现在把它记录下来。

  语句如下:

  select [OrderID],[ProductID], min(UnitPrice) as MinUnitPrice into NewDetails FROM [Northwind].[dbo].[Order Details] Group by [OrderID]

  执行该语句之后,SQL Server报错如下:

    “消息 8120,级别 16,状态 1,第 1 行选择列表中的列 'Northwind.dbo.Order Details.ProductID' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。”

  正确的语句应该是这样的:

  select [OrderID],[ProductID], min(UnitPrice) as MinUnitPrice into NewDetails FROM [Northwind].[dbo].[Order Details] Group by [OrderID],[ProductID]

  之所以应该这样写,是由Group By子句决定的。下面是从MSDN中找到的关于Group By的一些知识。

  Group的作用:

  指定由查询表达式(Select)返回的对象要分入的组。

  [ GROUP BY aliasedExpression [ ,...  n ] ] 

  参数:

  aliasedExpression

  要对其执行分组的任何有效查询表达式。expression可以是属性或者是引用 FROM 子句所返回的属性的非聚合表达式。 GROUP BY 子句中的每一个表达式的求值结果必须为可比较相等性的类型。这些类型通常为标量基元类型,如数字、字符串和日期。不可按集合分组。备注:

  如果 SELECT 子句