tSQL Error: Msg 8120, Level 16 on simple AdventureWorks 2008 R2 Database

tSQL Error: Msg 8120, Level 16 on simple AdventureWorks 2008 R2 Database

尝试在 tSql 上加速并做一个简单的,或者我认为是一个简单的陈述。此示例来自 Microsoft 的 Virtural Acdamey class“查询 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

这是错误信息 消息 8120,级别 16,状态 1,第 2 行 'Sales.SalesOrderHeader.SalesOrderID' 列在 select 列表中无效,因为它未包含在聚合函数或 GROUP BY 子句中。

我正在使用 SQL Server 2008 R2。多谢你们。任何解释将不胜感激

我不太确定你要做什么,但看起来你正试图对销售人员进行分组。如果是这样你应该改变

SELECT SalesOrderID, YEAR(OrderDate) AS OrderYear 来自 Sales.SalesOrderHeader 哪里(客户 ID = 29974) 按 SalesPersonID、YEAR(OrderDate)分组 有(计数(*)> 1) 按 SalesPersonID、OrderYear 排序

SELECT SalesPersonID, YEAR(OrderDate) AS OrderYear 来自 Sales.SalesOrderHeader 哪里(客户 ID = 29974) 按 SalesPersonID、YEAR(OrderDate)分组 有(计数(*)> 1) 按 SalesPersonID、OrderYear 排序

如果您使用 Group 子句,您需要执行错误消息指示的操作,并将 select 中的列添加到 group 子句中,或者将其更改为 select 中的聚合函数.既然你说你只是在学习 SQL,这些都是值得研究的好话题。 SQL 中的聚合和分组。

select 所需的 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