Sql server tSQL错误:Msg 8120,simple AdventureWorks 2008 R2数据库上的16级
尝试在tSql上升级并做一个简单的,或者我认为是一个简单的声明。此示例来自Microsoft的Virtual Acdamey类“查询Microsoft Sql Server 2012数据库”。以下是查询:Sql server tSQL错误:Msg 8120,simple AdventureWorks 2008 R2数据库上的16级,sql-server,sql-server-2008-r2,Sql Server,Sql Server 2008 R2,尝试在tSql上升级并做一个简单的,或者我认为是一个简单的声明。此示例来自Microsoft的Virtual Acdamey类“查询Microsoft Sql Server 2012数据库”。以下是查询: Use AdventureWorks SELECT SalesOrderID, YEAR(OrderDate) AS OrderYear FROM Sales.SalesOrderHeader WHERE (CustomerID = 29974) GROUP B
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,16级,状态1,第2行
列“Sales.SalesOrderHeader.SalesOrderID”在选择列表中无效,因为它未包含在聚合函数或GROUP BY子句中
我使用的是SQL Server 2008 R2。谢谢各位。如有任何解释,我将不胜感激。我不太确定您的目标,但看起来您正在尝试与销售人员进行分组。如果是这样,您应该进行更改 选择SalesOrderID,年(OrderDate)作为OrderYear 来自Sales.SalesOrderHeader 其中(CustomerID=29974) 按销售人员分组,年份(订单日期) 具有(计数(*)>1) 按销售人员的订单ONID,订单年份 到 选择SalesorSonid,年(OrderDate)作为OrderYear 来自Sales.SalesOrderHeader 其中(CustomerID=29974) 按销售人员分组,年份(订单日期) 具有(计数(*)>1) 按销售人员的订单ONID,订单年份
如果您使用Group子句,您需要按照错误消息指示的操作,将select tot to the Group子句中的列添加到Group子句中,或将其更改为select中的聚合函数。由于您说您只是在学习SQL,因此这些都是值得研究的好主题。SQL中的聚合和分组。选择所需的
列代码>并在分组方式中使用它
SELECT SalesPersonID, YEAR(OrderDate) AS OrderYear
FROM Sales.SalesOrderHeader
WHERE (CustomerID = 29974)
GROUP BY SalesPersonID, YEAR(OrderDate)
HAVING (COUNT(*) > 1)
ORDER BY SalesPersonID, OrderYear
SalesOrderID
在select
中,SalesorSonid
在group by
中,这就是为什么谢谢。我甚至没想过要找它。这种sql级别对我来说是新的。再次感谢。如果你能将其作为答案发布,我会非常乐意接受。NoDisplayName点击它。这可能是一个非常愚蠢的错误如果不是因为我对这件事有多陌生,那我该怎么办呢。谢谢安迪。我知道我可以依靠你们来帮助我。关于组子句的评论非常有用。谢谢。我会研究的。顺便说一句,帮我向落基山脉问好。我想念他们。天哪。我开始理解SQl是如何组合起来的。它的解析方式与任何程序都大不相同在过去的20年里,我一直在使用l语言。快速浏览一下tsql100解析器,就可以了解到这一点!!!!感谢NoDisplayName和Andy对Group子句语句的支持。