2016-08-01 53 views
1

我在SQL Server中有組問題,通過如何在SQL Server查詢中使用group by?

我有這個簡單的SQL語句:

select * 
from Factors 
group by moshtari_ID 

,我得到這個錯誤:

消息8120,級別16,狀態1,第1行
Column'Factors.ID'在選擇列表中無效,因爲它不包含在聚合函數或GROUP BY子句中。

這是我的結果,而不按:

enter image description here

,這是錯誤與GROUP BY命令:

enter image description here

哪裏是我的問題嗎?

+4

你需要了解分組。請先參加教程 –

+0

你想達到什麼目的?你想得到什麼輸出? – Mureinik

回答

7

一般而言,一旦開始分組,SELECT中列出的每列必須是GROUP中的列或其中的某個聚合。比方說,你有這樣的表:

| ID | Name  | City  | 
| 1 | Foo bar  | San Jose | 
| 2 | Bar foo  | San Jose | 
| 3 | Baz Foo  | Santa Clara | 

如果你希望得到您的數據庫中的所有城市的列表,並嘗試:

SELECT * FROM table GROUP BY City 

...這將失敗,因爲你請求不在GROUP BY子句中的列(ID和名稱)。您可以改爲:

SELECT City, count(City) as Cnt FROM table GROUP BY City 

...這會讓你:

| City  | Cnt | 
| San Jose | 2 | 
| Santa Clara | 1 | 

...但不會讓你的ID或名稱。你可以用例如子選擇或自我連接,但基本上你想要做的事情是不可能的。進一步分解你的問題(你希望數據看起來像什麼?),然後從那裏開始。

祝你好運!

1

當你分組時,你只能選擇你分組的列。其他列需要進行彙總。這可以用min(),avg(),count(),...

這樣的功能來完成。因爲使用group by可以使多個記錄具有唯一性。但是,列不是唯一的呢?數據庫需要有關如何顯示然後聚合的規則。

0

您需要在group by中應用聚合函數,如max(),avg(),count()。

例如這個查詢將總結總金額爲所有moshtari_ID

select moshtari_ID,sum (totalAmount) from Factors group by moshtari_ID; 

輸出將是

moshtari_ID SUM 
2    120000 
1    200000 
-1

試試吧,

select * 
from Factorys 
Group by ID, date, time, factorNo, trackingNo, totalAmount, createAt, updateAt, bark_ID, moshtari_ID 
-1

如果應用組條款,那麼你只能在選擇中使用組列和聚合函數

語法: SELECT表達式,表達式2,... expression_n, 的aggregate_function(aggregate_expression) FROM表 [WHERE條件] GROUP BY表達式,表達式2,... expression_n [ORDER BY表達式[ASC | DESC]];

+0

這不提供任何額外的元素。 – PJProudhon