2017-09-15 119 views
0

我对SQL非常陌生,正在努力完成一些任务以提高我的知识水平。不过,我发现自己陷入了一个问题。
我用乘法和减法,这是我用下面的命令完成,以找到项目的利润总额:在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 

我需要做的就是和利润总额和组它由产品ID为了找到最赚钱的项目和最不赚钱。我认为这会工作:

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 

不过,我收到以下错误:

,因为它不是在聚合函数或载列“production.product.StandardCost”在选择列表中无效GROUP BY子句。

我不知道该怎么继续。我尝试重新安排和做内/左连接,但我一直没有成功。

回答

0

因此对于分组,您需要在分组中声明聚合或包含。 您正在按产品ID进行分组,但其他列未汇总,并且不在按语句组合。

的修正可以(取决于你想如何聚合其他列)

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