【发布时间】:2021-09-01 20:16:53
【问题描述】:
我无法通过以下查询找出问题:
select distinct
i.Supplr1, v.Name, s.InvtID, s.CuryCost, s.CurySlsPrice, s.OrdNbr,
Sum(s.CurySlsPrice - s.CuryCost) AS GrossProfit,
Sum((s.CurySlsPrice - s.CuryCost)/s.CurySlsPrice) AS GrossPer
from
SOLine s, Inventory i, Vendor v
Inner Join
Inventory on Inventory.InvtID = s.InvtID
Inner join
Vendor on Vendor.VendID = Inventory.Supplr1
Union All
select distinct
a.InvtID, s.OrdNbr, s.OrdNbr, s.CuryCost, s.CurySlsPrice, s.OrdNbr,
s.Status, a.PerPost
from
ARTran a, Inventory i, SOLine S
Inner join
Inventory on Inventory.InvtId = ARTran.InvtID
Inner join
ARTran on ARTran.OrdNbr = SOLine.OrdNbr
错误如下:
消息 4104,第 16 级,状态 1,第 20 行
无法绑定多部分标识符“s.InvtID”。消息 4104,第 16 级,状态 1,第 31 行
无法绑定多部分标识符“ARTran.InvtID”。消息 4104,第 16 层,状态 1,第 33 行
无法绑定多部分标识符“SOLine.OrdNbr”。
我已经尝试了我所知道的一切(我的大脑可能有点糊涂)但仍然出现错误。
我的查询有什么问题?
【问题讨论】:
-
能否请您发布
SOLine和ARTran的表架构。 -
WHY 你在
FROM子句中使用逗号分隔列表中的三个表(这是不鼓励,应该避免!),以及正确的JOIN语句?应该使用正确的JOINs - 他们应该得到表别名JOIN Inventory i ON i.InvtID = s.InvtID。如果您像这样清理查询,它应该可以正常工作 -
你为什么将
join语法与 30 多年前的语法混合在一起?您正在重复表格,这是您的问题。 -
是这个完整的查询。我看到第 31、33 行,它们在您的代码中不存在
-
显式连接在之前以逗号分隔,隐式连接。这意味着
Vendor v Inner Join Inventory只能引用ON子句中的v 和Inventory 列。
标签: sql sql-server tsql