2015-08-28 65 views
-2

表的用戶:如何加入表中的SQL Server來獲得期望的結果

UID | NAME 
------------ 
100 | RAVI 
101 | Raju 
102 | Manju 
103 | Arun 

表SESSION:

SID | DATE | TIME | STrain_ID 
---------------------------------- 
1 | 1/1/2015 | 11:30 | 1 
2 | 12/1/2015 | 12:30 | 2 
3 | 25/1/2015 | 01:30 | 3 
4 | 25/1/2015 | 02:30 | 4 

表培訓師:

Train_ID | Primary | secondarry | other  | primID | secID | otherID 
-------------------------------------------------------------------------- 
1  | RAVI  |    | Manju  | 100 |  | 102 
2  |   | RAVI   |   |  | 100 | 
3  |   |    | RAVI  |  |  | 100 
4  |   | Manju  | Ravi  |  | 102 | 100 

預期結果

SID | DATE  | TIME | Train_ID | NAME | ROLE 
------------------------------------------------- 
1 | 1/1/2015 | 11:30 | 1  | RAVI |primary 
1 | 1/1/2015 | 11:30 | 1  | Manju|other 
2 | 12/1/2015 | 12:30 | 2  | RAVI |secondary 
3 | 25/1/2015 | 01:30 | 3  | RAVI |other 
4 | 25/1/2015 | 02:30 | 4  | Manju|secondary 
+1

在哪裏的問題?什麼是「預期結果」?你試過什麼了? 「RAVI 101」意味着什麼,這是多少信息? – Shnugo

+0

我已經添加了預期結果 – rock

+0

Thx,好多了:-)但是到目前爲止你嘗試過了什麼? – Shnugo

回答

0

嘗試下面的查詢,

select s.*,u.Name,t.src from [SESSION] s join 
(select Train_ID,primID as usr,'primary' src from TRAINERS where primID is not null 
union all 
select Train_ID,secID, 'secondary' src from TRAINERS where secID is not null 
union all 
select Train_ID,otherID, 'others' src from TRAINERS where otherID is not null) t 
on s.[sid]=t.train_id join USERS u on t.usr=u.[UID] 
+0

謝謝你寶貴的時間ANK,這對我很有用。 – rock

1

查看下方代碼。我看到了預期結果的模式,將會有多行4-Train_ID,Ravi作爲「其他」角色。正如@JamesZ已經提到你的設計,你也必須在這方面進行研究。

SELECT S.SID, S.DATE, S.TIME, S.STrain_ID AS Train_ID ,U.NAME, CASE WHEN T.[Primary] = U.NAME THEN 'Primary' 
                 WHEN T.[Secondary] = U.NAME THEN 'Secondary' 
                 WHEN T.[Others] = U.NAME THEN 'Others' END AS [ROLE] 
FROM #SESSION S 
INNER JOIN #TRAINERS T ON S.STrain_ID = T.Train_ID 
LEFT JOIN #USERS U ON (U.Name = T.[Primary])OR (U.Name = T.[Secondary]) OR (U.Name = T.Others) 

標記它回答如果它可以幫助你。

+0

它有助於解決您的問題嗎? – kumarvik

相關問題