2012-08-17 96 views
0

下面我有2個表,我需要得到不用其他的臨時表輸出SQL查詢在SQL Server 2008中

WorkItem 

ItemID ItemName Status 
1  xyz  3 
2  abc  3 
3  MNO  2 

WorkItemTrack 

TrackID ItemID Status 
1  1  1 
2  1  2 
3  1  3 
4  2  1 
5  2  2 
6  3  1 
7  3  2 

這是我的查詢

select ItemName, WorkItem.Status from WorkItem Inner join WorkItemTrack ON WorkItem.ItemID=WorkItemTrack.ItemID 
where WorkItemTrack.Status=2 

&這是我的輸出

ItemName Status 
    XYZ  3 
    ABC  3 
    MNO  2 

但我只需要狀態爲2的MNO的輸出

ItemName Status 
    MNO  2 

如何不使用臨時表

+0

的'Status'的'WorkItem'和'WorkItemTrack'兩混淆 - 你想過濾哪一個?他們是否也應該加入? – Lucero 2012-08-17 07:08:27

回答

0

做你既可以做

select ItemName, WorkItem.Status from WorkItem 
Inner join WorkItemTrack ON WorkItem.ItemID=WorkItemTrack.ItemID 
where WorkItemTrack.Status=2 and WorkItem.Status=2 

select * from 
    (select ItemName, WorkItem.Status as status from WorkItem 
    Inner join WorkItemTrack ON WorkItem.ItemID=WorkItemTrack.ItemID 
    where WorkItemTrack.Status=2) 
where status=2 

(如果你需要後來變得更加複雜,並希望做其他事情的初步結果)

+0

是的(沒有足夠的咖啡在身體..將編輯) – BugFinder 2012-08-17 07:15:39

+0

謝謝。第二個查詢工作 – Somashekhar 2012-08-17 07:18:24

0
select i.ItemName, i.Status 
from WorkItem i 
inner join WorkItemTrack t ON i.ItemID = t.ItemID 
where t.Status = 2 
AND i.Status = 2 
0

你的問題是模糊的,但是這可能是你想要什麼:

SELECT ItemName, wi.Status 
FROM WorkItem AS wi 
JOIN WorkItemTrack AS wit ON (wi.ItemID=wit.ItemID) AND (wi.Status=wit.Status) 
WHERE wit.Status=2 

或許

SELECT ItemName, wi.Status 
FROM WorkItem AS wi 
JOIN WorkItemTrack AS wit ON (wi.ItemID=wit.ItemID) AND (wit.Status=2) 
WHERE wi.Status=2 
1

這將同樣的工作

Select x.ItemName,x.Status 
From (Select * from WorkItem where Status = 2) x 
Join (Select ItemID from WorkItemTrack where Status = 2) y 
on x.ItemID=y.ItemID 
0

使用一個更多join選項

select a.ItemName, a.Status from WorkItem a Inner join worktrack b ON a.ItemID=b.ItemID and a.status=b.status where b.Status=2 

其他不同

select distinct ItemName, WorkItem.Status from WorkItem inner join worktrack ON WorkItem.ItemID=worktrack.ItemID where workitem.Status=2 

別的行NUM

select top 1 * from (select row_number() over (partition by workitem.status order by workitem.status) as rownum , 
ItemName, WorkItem.Status from WorkItem inner join worktrack ON WorkItem.ItemID=worktrack.ItemID 
where worktrack.status=2) a 
where a.rownum=1