GROUP BY子句出错

时间:2012-01-23 15:02:17

标签: sql sql-server

我收到错误:

Column 'dbo.Saved_ORDER_IMPORT.Company' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

当我执行时:

SELECT [Order No], Company
FROM [dbo].[Saved_ORDER_IMPORT] 
where [sent] = 1 and datesent  between '01/01/2009' and '01/27/2012'
group by [Order No]

我是否必须更改列或查询?

5 个答案:

答案 0 :(得分:4)

<强>描述

您不能只按一列对查询进行分组,因为您选择了2。

  

MSDN - 通过SQL Server中一个或多个列或表达式的值将选定的一组行分组到一组摘要行中。每组返回一行。 SELECT子句列表中的聚合函数提供有关每个组的信息,而不是单个行。

我们需要更多信息,但这可能有帮助

<强>示例

SELECT [Order No], Company
FROM [dbo].[Saved_ORDER_IMPORT] 
WHERE [sent] = 1 AND datesent BETWEEN '01/01/2009' AND '01/27/2012'
GROUP BY [Order No], Company

更多信息:

答案 1 :(得分:0)

您必须将Company字段放在group by子句中。

答案 2 :(得分:0)

GROUP BY子句告诉SQL为列表中的每个项返回1行。在您的情况下,您希望每个订单号有一行。如果也想要公司,你需要将它包含在组中。

如果您想要的只是按订单#,公司排序,请删除该组,然后使用ORDER BY。

答案 3 :(得分:0)

也可以按公司从选择或分组中删除公司。

举个例子:

您有五个订单号和两个公司
1 - 公司1 1 - 公司2
2 - 公司1 2 - 公司2
3 - 公司1

现在您按订单编号分组,因此您有3个结果:
1
2
3

......但订单号的结果是什么?因为订单号1可以是公司1或公司2。

答案 4 :(得分:0)

您的查询返回该错误,因为您没有在select语句中使用AGGREGATE函数。在GROUP BY语句中包含[Company]字段会删除错误但是没有意义。