SQL如果条件

时间:2013-01-18 14:41:50

标签: sql sql-server if-statement

我有一个名为Train的表,其中包含以下示例数据:

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查询中使用if条件?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

使用case

http://www.tizag.com/sqlTutorial/sqlcase.php

给出了如何使用

的示例
    'station' = CASE
    WHEN (strt_stn_id > end_stn_id) THEN (end_stn_id)
    ELSE (strt_stn_id)
        END

答案 2 :(得分:0)

虽然你绝对可以把逻辑放在on子句中,但我更喜欢做两个单独的连接并将逻辑放在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条款中使用逻辑更容易理解,但我认识到其他人可能不同意。