2013-01-18 44 views
0

我有一個表叫Train這個樣本數據:SQL如果條件

train_id strt_stn_id end_stn_id direction 
--------------------------------------------- 
1   1    10   D   
2   1    21   D   
3  10    1    U   
4   1    5    D   
5   1   15    D 

Station表與此數據:

stn_id stn_name 
--------------------- 
1   Churchgate 
2   Marine Lines 
3   Charni Road 
4   Grant Road 
5   Mumbai Central 
6   Mahalaxmi 
7   Lower Parel 
8   Elphinstone Road 
9   Dadar 
10  Matunga Road 
11  Mahim 
12  Bandra 
13  Khar Road 
14  Santacruz 
15  Vile Parle 

我想站名取決於條件。如果strt_stn_id > end_stn_id,我想要站名end_stn_id其他站名稱strt_stn_id

那麼如何在SQL查詢中使用條件?

+1

您使用的數據庫是? – SWeko

+0

我希望的輸出是stn_name,具體取決於條件 –

+0

@ SWeko:我使用SQL Server數據庫 –

回答

4

嘗試這樣一個例子:

SELECT T.*, S.stn_name 
FROM Train T 
INNER JOIN Station S 
    ON CASE WHEN T.strt_stn_id > T.end_stn_id 
     THEN T.end_stn_id ELSE T.strt_stn_id END = S.stn_id 
0

雖然你絕對可以把邏輯on子句中,我更喜歡做兩個separ吃了連接,把邏輯select子句中:

SELECT T.*, 
     (case when t.strt_stn_id > t.end_stn_id then starts.stn_name 
      else ends.stn_name 
     end) as TheName 
FROM Train T INNER JOIN 
    Station Starts 
    ON T.strt_stn_id = Starts.stn_id inner join 
    Station ends 
    on T.end_stn_id = ends.stn_id 

一般而言,case語句或功能都在一個on條款防止發動機使用索引。如果這些表具有合理的索引(例如在其主鍵上),則此版本可以更好地工作。另外,我還認爲select條款中的邏輯更容易理解,但我承認其他人可能會不同意。