2016-07-15 123 views
0

不是最大的使用SQL,但我有寫這個查詢掙扎。情況是我有一個項目表。如果該項目是陳舊的「obso」並具有更換ID,然後在查詢我應該選擇,而不是已經過時的一個替換項目。這裏是我有什麼和一些照片,使其更清晰。SQL查詢來尋找替代項目

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

+0

聽起來像是你應該選擇'i.ItemWarrantyID'代替。 – sgeddes

+0

,因爲對於項目ID 948032 ReplacementItemId爲空。 –

+0

@JaydipJ這不是問題。原來的產品834852.更換爲948032(您可以在ReplacementItemID請參閱834852)。您還可以在第一張圖片中看到OriginalItemId。這個問題與Troy Bryant和sgeddes提到的ItemWarrantyID有關。 – CodyMR

回答

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的和許多其他的東西)