如何在一个代码上两次联接同一个表


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()

最新更新