選擇列表中的列……無效,因為該列沒有包含在聚合函數或 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子句指定次序。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM