sqlServer关于group by的问题

sqlServer关于group by的问题,第1张

概述今天在做asp.net的时候遇到了些小问题,有个要求: 添加一个数据源控件,通过多表查询,找出销售量在前十的产品。(在SalesOrderDetail表的OrderQty字段表示订货量,希望大家先尝试自己写查询语句,实在没办法解决才去看参考答案。) 有个屁的参考答案呀!!! 只好自己写语句,在这过程中复习了很多关于sql语句的知识。 遇到最多的情况就是: 选择列表中的列 'Product.Mo

今天在做asp.net的时候遇到了些小问题,有个要求:

添加一个数据源控件,通过多表查询,找出销售量在前十的产品。(在SalesOrderDetail表的OrderQty字段表示订货量,希望大家先尝试自己写查询语句,实在没办法解决才去看参考答案。)


有个屁的参考答案呀!!! 只好自己写语句,在这过程中复习了很多关于SQL语句的知识。
遇到最多的情况就是:
选择列表中的列 'Product.ModifIEdDate' 无效,因为该列没有包含在聚合函数或 GROUP BY 子句中。
这个主要是对group by 的不了解。
网上找到了这样一段话:

选择列表中有形如SUM,COUNT等聚合函数,需要将所有SELECT的列加入到GROUP BY子句中去,你选择了ApprovalID列在GROUP BY子句中没有ApprovalID,所以会报错。

也就是如果要用group by,要显示的字段就都必须添加到group by 里面去。
让我们分析一下group by 的过程:

先执行select 的 *** 作返回一个程序集,--然后去执行分组的 *** 作,这时候他将根据group by 后面的字段--进行分组,并且将相同的字段并称一列数据,如果group by 后面没有这个字段的话就要分成好多的数据。--但是分组就只能将相同的数据分成两列数据,而一列中又只能放入一个字段,所以那些没有进行分组的--数据系统不知道将数据放入哪里,所以就出现此错误

附下午写的SQL语句:

select top(10) Product.* from Product  left join SalesOrderDetail on  Product.ProductID=  SalesOrderDetail.ProductID where( SalesOrderDetail.ProductID= any(select top(10) SalesOrderDetail.ProductIDfrom SalesOrderDetail group by SalesorderDetail.ProductID order by sum(SalesOrderDetail.OrderQty) desc)) group by Product.ProductID,Product.name,ProductNumber,Product.color,Product.Size,Product.Weight,Product.Price,Product.ProductSubcategoryID,Product.rowguID,Product.ModifIEdDate

逗了。。 弄得这么复杂 应该这样

SELECT top(10) Product.ProductID,UnitPrice,sum(SalesOrderDetail.OrderQty)as TotalOrderQtyFROM Product INNER JOIN SalesOrderDetail ON Product.ProductID = SalesOrderDetail.ProductID group by Product.ProductID,UnitPrice order by sum(SalesOrderDetail.OrderQty) desc
总结

以上是内存溢出为你收集整理的sqlServer关于group by的问题全部内容,希望文章能够帮你解决sqlServer关于group by的问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1169035.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存