Select Production.ProductCategory.Name,
Production.ProductSubcategory.Name,
Production.ProductModel.Name,
Production.Product.ProductNumber,
Production.Product.Name,
Sales.SalesOrderDetail.OrderQty,
(sales.SalesOrderDetail.OrderQty * Production.Product.StandardCost) AS 'Cost',
Sales.SalesOrderDetail.LineTotal AS 'Revenue',Max('Revenue')-Min('Cost') AS Profit,
((Profit/(sales.SalesOrderDetail.OrderQty * Production.Product.StandardCost))*100) AS 'Markup_Percentage'
From Sales.SalesOrderDetail
Left Join Production.Product ON Product.ProductSubcategoryID = SalesOrderDetail.ProductID
Left Join Production.ProductSubcategory ON Production.ProductSubcategory.Name = Production.Product.ProductSubcategoryID
Left join Production.ProductCategory ON Production.ProductCategory.ProductCategoryID = Production.ProductSubcategory.Name
Left Join Production.ProductModel ON ProductModel.Name = SalesOrderDetail.SalesOrderID
Left join Production.Product ON Production.Product.Name = Production.ProductModel.Name
Order by Max('Revenue')-Min('Cost') asc;
我正在做一项任务,我基本上需要加入多个表,但我的问题是,由于有一个别名表,我尝试加入产品表两次,但它总是弹出一条消息:
消息1013,级别16,状态1,行1对象";生产;以及";生产;FROM子句中具有相同的公开名称。使用关联名称来区分它们。
您应该为查询中的每个对象使用别名:
Select pc.Name,
ps.Name,
pm.Name,
p.ProductNumber,
p.Name,
sod.OrderQty,
(sod.OrderQty * p.StandardCost) AS "Cost",
sod.LineTotal AS "Revenue",
Max(sod.LineTotal)-Min(sod.ORderQty*p.StandardCost) AS Profit,
(((Max(sod.LineTotal)-Min(sod.ORderQty*p.StandardCost))/(sod.OrderQty * p.StandardCost))*100) AS "Markup_Percentage"
From Sales.SalesOrderDetail sod
Left Join Production.Product p ON p.ProductSubcategoryID = sod.ProductID
Left Join Production.ProductSubcategory ps ON ps.Name = p.ProductSubcategoryID
Left join Production.ProductCategory pc ON pc.ProductCategoryID = ps.Name
Left Join Production.ProductModel pm ON pm.Name = sod.SalesOrderID
Left join Production.Product p2 ON p2.Name = pm.Name
Order by Max(sod.LineTotal)-Min(sod.OrderQty * p.StandardCost) asc;
由于Production.Product
被使用了两次,我不确定在SELECT
子句中引用了表的哪个实例,只能猜测。。。这应该解释为什么这是一个错误:查询不明确。
现在,查询不再是模棱两可的,但由于我不知道表的哪个实例是在我刚刚使用Product
表的第一个实例的地方使用的,这可能在一些地方是错误的。
一般来说,您应该为几乎每个至少有两个表的查询使用别名。
另外,我认为在没有GROUP BY
的情况下,不允许在这样的查询中使用MAX()
和MIN()
。