尝试增加tSql并做一个简单的,或者我认为是一个简单的陈述。这个例子来自微软的Virtural Acdamey类“查询Microsoft Sql Server 2012数据库。这是查询:
Use AdventureWorks
SELECT SalesOrderID, YEAR(OrderDate) AS OrderYear
FROM Sales.SalesOrderHeader
WHERE (CustomerID = 29974)
GROUP BY SalesPersonID, YEAR(OrderDate)
HAVING (COUNT(*) > 1)
ORDER BY SalesPersonID, OrderYear
这是错误消息 Msg 8120,Level 16,State 1,Line 2 列'Sales.SalesOrderHeader.SalesOrderID'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。
我正在使用SQL Server 2008 R2。多谢你们。任何解释都将非常感谢
答案 0 :(得分:0)
我不确定你的目的是什么,但看起来你正试图对销售人员进行分组。如果是这样,你应该改变
SELECT SalesOrderID ,YEAR(OrderDate)AS OrderYear FROM Sales.SalesOrderHeader WHERE(CustomerID = 29974) GROUP BY SalesPersonID,YEAR(OrderDate) HAVING(COUNT(*)> 1) 按订单生产SalesPersonID,OrderYear
到
SELECT SalesPersonID ,YEAR(OrderDate)AS OrderYear FROM Sales.SalesOrderHeader WHERE(CustomerID = 29974) GROUP BY SalesPersonID,YEAR(OrderDate) HAVING(COUNT(*)> 1) 按订单生产SalesPersonID,OrderYear
如果使用Group子句,则需要执行错误消息所指示的内容,并在select tot the group子句中添加该列,或将其更改为select中的聚合函数。既然你说你刚学习SQL,这些都是一些值得研究的好主题。 SQL和分组中的聚合。
答案 1 :(得分:0)
选择所需的column
并在group by
SELECT SalesPersonID, YEAR(OrderDate) AS OrderYear
FROM Sales.SalesOrderHeader
WHERE (CustomerID = 29974)
GROUP BY SalesPersonID, YEAR(OrderDate)
HAVING (COUNT(*) > 1)
ORDER BY SalesPersonID, OrderYear