tSQL错误:Msg 8120,简单的AdventureWorks 2008 R2数据库的16级

时间:2015-01-12 16:45:25

标签: sql-server sql-server-2008-r2

尝试增加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。多谢你们。任何解释都将非常感谢

2 个答案:

答案 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