0

一時テーブルなしで出力を取得するために必要なテーブルが2つ以下あります

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

一時テーブルを使用せずに行う方法

4

5 に答える 5

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
于 2012-08-17T08:08:16.987 に答える
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
于 2012-08-17T07:12:56.603 に答える
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
于 2012-08-17T07:06:35.743 に答える
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

(後でもっと複雑にする必要があり、最初の結果で他のことをしたい場合)

于 2012-08-17T07:09:07.053 に答える
0

もう1つの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

また

それ以外の場合は行番号

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
于 2012-08-17T08:14:42.317 に答える