两个表上的SQL Sum和Group

时间:2017-09-15 02:12:00

标签: sql-server

我非常擅长SQL并且正在完成一些任务以提升我的知识。不过,我发现自己陷入了困境 我必须使用乘法和减法找到项目的总利润,我已使用以下命令完成:

select 
   production.product.ProductID, 
   StandardCost, 
   sales.SalesOrderDetail.OrderQty, 
   UnitPrice,
   (sales.SalesOrderDetail.UnitPrice*sales.SalesOrderDetail.OrderQty)-
   (production.product.StandardCost*sales.salesorderdetail.OrderQty) as 
   'Total Profit'
from 
     sales.SalesOrderDetail, 
     production.product

我需要做的是将总利润相加并将其与ProductID分组,以便找到最有利可图的项目和最低利润的项目。我认为这样可行:

select 
     production.product.ProductID, 
     StandardCost, 
     sales.SalesOrderDetail.OrderQty, 
     UnitPrice,
     sum((sales.SalesOrderDetail.UnitPrice*sales.SalesOrderDetail.OrderQty)-
     (production.product.StandardCost*sales.salesorderdetail.OrderQty)) as 
     'Total Profit'
from 
    sales.SalesOrderDetail, 
    production.product
group by 
    Production.Product.ProductID

但是,我收到以下错误:

Column' production.product.StandardCost'在选择列表中无效,因为它不包含在聚合函数或GROUP BY子句中。

我不知道该在哪里继续。我尝试重新排列并进行内/左连接,但我没有成功。

1 个答案:

答案 0 :(得分:0)

因此,对于分组,您需要聚合或包含在group by语句中。 您按productID进行分组,但其他列未聚合且不在group by语句中。

可以进行修正(取决于您希望如何聚合其他列)

select 
  production.product.ProductID
  , avg(StandardCost) as AvgCost
  , sum(sales.SalesOrderDetail.OrderQty) as TotalQuantity
  , avg(UnitPrice) as AvgUnitPrice
  , sum((sales.SalesOrderDetail.UnitPrice*sales.SalesOrderDetail.OrderQty)-
        (production.product.StandardCost*sales.salesorderdetail.OrderQty)) as [Total Profit]
from sales.SalesOrderDetail
, production.product
group by Production.Product.ProductID