zoukankan      html  css  js  c++  java
  • 选择列表中的列……无效,因为该列没有包含在聚合函数或 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 子句 <select list> 中包含聚合函数,则 GROUP BY 将计算每个组的汇总值。指定 GROUP BY 时,选择列表中任何非聚合表达式内的每个属性名都应包含在GROUP BY列表中,或者GROUP BY表达式必须与选择列表表达式完全匹配。

      使用Group By子句的时候,一定要记住下面的一些规则:

      (1)不能Group By非标量基元类型的列,如不能Group By text,image或bit类型的列;

      (2)Select指定的每一列都应该出现在Group By子句中,除非对这一列使用了聚合函数;

      (3)不能Group By在表中不存在的列;

      (4)进行分组前可以使用Where子句消除不满足条件的行;

      (5)使用Group By子句返回的组没有特定的顺序,可以使用Order By子句指定次序。

  • 相关阅读:
    Android adb from work ---three
    作为一个程序员,分享一下我自己常用的几款非常方便的chrome插件
    chrome浏览器安装网页测试插件postman的图文介绍
    【转】精选十二款餐饮、快递、票务行业微信小程序源码demo推荐
    浅谈微信小程序对于房地产行业的影响
    推荐三款自己使用过的鼠标手势插件
    微信小程序基本目录结构学习
    怎么提交小程序给微信?微信小程序的提交审核流程
    微信小程序理解8大误区,你中招了吗?
    微信小程序火爆,谁能在微信小程序赚取第一桶金?
  • 原文地址:https://www.cnblogs.com/printN/p/6725026.html
Copyright © 2011-2022 走看看