2017-09-11 10 views
0

私は3つのテーブルを持つデータベースの例を持っています。複数の結合でSQLを選択する

1 Work: workID, stateID, createddate 

2 Work history table: workID, old_state, new_state, transitiondate 

3 Work state: StateID; Statename 

私は、リストの作品を印刷し、それらの状態の変化のすべてのだろうクエリを作成したいのは、可能性のある状態が1 = ready2 = test3 = approved

あるとしましょう。結果は次のようになります。

ID, createddate, Currentstate, OldState, Newstate, transitiondate 
1, 1-1-2016, approved,  ready, test,  1-1-2016 
1, 1-1-2016, approved,  test,  approved, 2-1-2016 
2, 1-5-2016, test,   ready, test,  1-5-2016 
3, 1-10-2016, approved,  ready, test,  1-10-2016 
3, 1-10-2016, approved,  test,  approved, 1-15-2016 
... 

私はインナーので、私は簡単に状態テーブルからの仕事の現在の状態の名前を取得することができます加わるようにする方法を知っているが、私は昔の名前を取得することはできませんし、新しい州。どんな種類の結合コマンドを使うべきですか?

+0

WorkStateテーブルを2回結合します。古い状態で1回、新しい状態で1回です。 – jarlh

答えて

0

クエリの下に使用してください -

select t1.workID , t1.createddate , t3.Statename Currentstate , 
t4.Statename OldState , t5.Statename Newstate, t2.transitiondate 
from [Work] t1 
join [Work history] t2 on t1.workID = t2.workID 
join [state] t3 on t3.StateID = t1.stateID 
join [state] t4 on t4.StateID = t2.old_state 
join [state] t5 on t5.StateID = t2.new_state 
0

使用3の内側には、以下のように同じテーブルに合流 -

select 
w.workID as ID, 
W.createddate, 
WSC.Statename as Currentstate, 
WSO.Statename as OldState , 
WSN.Statename as Newstate, 
WH.transitiondate 
from Work W 
inner join workHistory WH on w.workID = WH.workID 
inner join WorkState WSC on WSC.StateId = W.StateId 
inner join WorkState WSO on WHO.StateId = WH.OldState 
inner join WorkState WSN on WSN.StateId = WH.Newstate 

OR

select 
w.workID as ID, 
W.createddate, 
(select top 1 Statename from WorkState where stateId = W.StateId) as Currentstate, 
(select top 1 Statename from WorkState where stateId = WH.OldState) as OldState , 
(select top 1 Statename from WorkState where stateId = WH.Newstate) as Newstate, 
WH.transitiondate 
from Work W 
inner join workHistory WH on w.workID = WH.workID 
0

こんにちはValtteri Vaahtonen、

ますusiを考慮する必要がありますNG LEFTは、あなたのマスターテーブルとして[ワーク履歴]テーブルを使用して、JOINし、このようにそれに他のテーブルをリンク:

SELECT WH.ID, W.createddate, WS.Statename AS Currentstate, WH.OldState, WH.Newstate, WH.transitiondate 
FROM [Work history] WH 
LEFT JOIN [Work] W on WH.workID = W.workID 
INNER JOIN [Work state] WS ON WS.StateID = W.StateID 

はそれが助け場合、私に教えてください!

関連する問題