select Count(Shipper.ShipperID),Shipper.ShipperName from [Order]
left join Shipper
on [Order].ShipperID = Shipper.ShipperID
group by Shipper.ShipperName
當您在sql server的select語句中添加任何聚合函數時,Sql Server知道它需要對該查詢返回的所有行執行該聚合操作。
現在,當您在select查詢中添加另一個列名稱並且它不包含在任何聚合函數中時,只需使用它自己的列名稱即可。現在,Sql服務器需要知道在返回行時如何處理此列。
一個聚合函數擁有自己的代碼很簡單,直截了當sql服務器將簡單地對每行中從該查詢返回的所有值執行該操作,並返回具有標量值的單個行。
但是,如果在select語句中沒有包含在聚合函數中的其他列名稱,則會爲該列返回多行,現在如果sql server顯示第一列的SUM和第二列的所有行,將顯示不準確的結果。有SQL服務器拋出和錯誤,你將需要聚合由你的聚合函數調用的結果由沒有包含在任何聚合函數中的列。
您的查詢
如果僅選擇ShipperID的數量將返回顯示ShipperIDs的計數的整數讓說10,現在,當你在你的SELECT語句添加ShipperName,結果會顯示類似10爲計數列和第二列中的所有ShipperName,並且最終會在每個shipperName前面顯示類似於10,10,10的結果集,這將是錯誤的計數,顯然sql服務器不會執行此語句。
但是,如果您在select語句中添加GROUP BY ShipperName,則Count將不再爲每個ShipperName顯示10,但每個ShipperName的COUNT類似於1,3,4,2等等...... 我希望這會幫助你理解。 :)
兩個表[爲了]和[託運人]包含該領域的訂單,每個託運人shipperID「錯誤只是簡單地說明你希望按哪個表分組(可能是[shipper]。[shipperID] as [order]。[shipperID]可以爲null。但是這不會解決問題。select中的每個字段都不是part (計數,最大總和,min作爲示例)必須在分組中,如果在SQL服務器中存在聚合 – xQbert