用SQL查询查找替换项

时间:2016-07-15 16:48:52

标签: sql sql-server

不是最好的sql,但我正在努力编写这个查询。情况是我有一个项目表。如果该项目已过时,那么该项目已经过时了。并且有一个替换ID然后在查询中我应该选择该替换项而不是已经过时的项。以下是我所拥有的和一些图片,以使其更清晰。

select 
o.ReplacementItemID,
o.ItemStatus,
o.Description,
o.ItemWarrantyID,
o.Id as OriginalItemId
from
(
    select 
        id,
        ItemStatus,
        Description,
        ItemWarrantyID,
        ReplacementItemID
    from item
    where ItemStatus = 'obso'   
)o
inner join Item i
on o.ReplacementItemID = i.Id

这给了我enter image description here

这是不正确的保修ID应该是110,如下面的两个例子:

enter image description here

1 个答案:

答案 0 :(得分:1)

正如评论中提到的sgeddes,您引用了错误的ItemWarrantyID。你...

from
(
select 
    id,
    ItemStatus,
    Description,
    ItemWarrantyID,
    ReplacementItemID
from item
where ItemStatus = 'obso'   
)o

是关于原始的。之后的部分......

inner join Item i
on o.ReplacementItemID = i.Id

这样做只能看到有替换件的部件。问题是您只使用原始文件,同时过滤掉所有没有替换的行。

所以你...

select 
o.ReplacementItemID,
o.ItemStatus,
o.Description,
o.ItemWarrantyID,
o.Id as OriginalItemId

应该......

select 
o.ReplacementItemID,
o.ItemStatus,
o.Description,
i.ItemWarrantyID,
o.Id as OriginalItemId

假设您只是在寻找原件(您似乎是基于where ItemStatus = 'obso'inner join以及许多其他事情)