如何将产品的订单金额汇总为一行
Posted
技术标签:
【中文标题】如何将产品的订单金额汇总为一行【英文标题】:How do i aggregate the order amount for the products into one row 【发布时间】:2017-04-08 12:51:15 【问题描述】:使用 Adventureworks 数据库,我想返回每种产品的订购总额。提出了 2 个查询,但对如何将每个产品的总金额汇总到一行感到困惑。第一个查询返回每个产品 ID 的多个订单和金额。添加了“汇总”子句,但现在返回 NULL 值。汇总是在这里使用的正确函数吗?我如何将订购的每种产品的总量放入一个结果行?我是不是太复杂了……谢谢!
第一个查询:
select p.productid, p.name, sum(od.unitprice - od.unitpricediscount) *
od.orderqty as total_amount
from Production.product p
join sales.SalesOrderDetail od on p.ProductID = od.ProductID
group by p.productid, p.name, od.UnitPrice, od.UnitPriceDiscount,
od.OrderQty
order by p.productid;
返回样本:
707 Sport-100 Helmet, Red 93.573
707 Sport-100 Helmet, Red 77.9775
707 Sport-100 Helmet, Red 150.4989
707 Sport-100 Helmet, Red 200.6652
707 Sport-100 Helmet, Red 313.7231
707 Sport-100 Helmet, Red 3754.689
707 Sport-100 Helmet, Red 1986.8716
707 Sport-100 Helmet, Red 1469.58
第二次查询:
select p.productid, p.name, sum(od.unitprice - od.unitpricediscount) *
od.orderqty as total_amount
from Production.product p
join sales.SalesOrderDetail od on p.ProductID = od.ProductID
group by p.productid, rollup(p.name), od.UnitPrice, od.UnitPriceDiscount,
od.OrderQty
order by p.productid;
返回集示例:
707 NULL 187.146
707 NULL 124.764
707 NULL 249.528
707 NULL 167.221
707 NULL 200.6652
707 NULL 313.7231
707 NULL 383.89
707 NULL 1635.1065
【问题讨论】:
试过但收到错误:Msg 8120, Level 16, State 1, Line 4 列 'sales.SalesOrderDetail.OrderQty' 在选择列表中无效,因为它不包含在聚合函数或GROUP BY 子句。 预期结果是将 productid 总数聚合到一行中。 ProdID 707 = 所有产品的总金额等等。 搞清楚了。忘记包装我的选择列表 = 愚蠢的初学者错误 【参考方案1】:问题是您的分组依据包含价格和折扣,因此不会进行汇总。试试这个:
select p.productid, p.name, sum(od.unitprice -
od.unitpricediscount) *
od.orderqty as total_amount
from Production.product p
join sales.SalesOrderDetail od on p.ProductID =
od.ProductID
group by p.productid, p.name
order by p.productid;
【讨论】:
就是这样,再加上我没有将 sum 函数包装为聚合。以上是关于如何将产品的订单金额汇总为一行的主要内容,如果未能解决你的问题,请参考以下文章