2016-08-01 58 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