如何在sql查询中添加一列,并选择结果

时间:2017-03-09 09:44:51

标签: sql postgresql select

我有一个像这样的sql语句:

SELECT  a.link_id, a.Speed_Limit_1, a.Speed_Limit_2, a.speed_limit_source, g.autos, g.trucks, g.motorcycles, 'vehicleType' as vehicleType

FROM  g, f, d, a

WHERE  f.access_id = g.access_id
AND d.condition_id = f.condition_id
AND g.access_id = a.access_id

结果:

link_id ......汽车... ...卡车摩托车.........的 vehicleTypes

1 .......... | .......ÿ.... | ....ÿ...... | .....Ñ.... ............. |?.............

2 .......... | .......ÿ.... | ....ÿ...... | .....ÿ.... ............. |?.............

3 .......... | .......ÿ.... | ....ÿ...... | .....Ñ.... ............. |?.............

4 .......... | .......ÿ.... | ....Ñ...... | .....ÿ.... ............. |?.............

我将添加列“vehicleTypes。此列中的内容应为:

0如果允许汽车,卡车和摩托车(例如第2排)

如果只允许车辆,则

1

2如果只允许卡车

3如果只允许摩托车

我该怎么做?

2 个答案:

答案 0 :(得分:1)

这应该这样做。 我添加了一个ELSE -1来指示它与任何标准不匹配的位置。

SELECT  
    a.link_id, 
    a.Speed_Limit_1, 
    a.Speed_Limit_2, 
    a.speed_limit_source, 
    g.autos, g.trucks, 
    g.motorcycles, 

    CASE 
        WHEN g.autos = 'Y' AND g.trucks = 'Y' AND g.motorcycles = 'Y' THEN 0
        WHEN g.autos = 'Y' AND g.trucks = 'N' AND g.motorcycles = 'N' THEN 1
        WHEN g.autos = 'N' AND g.trucks = 'Y' AND g.motorcycles = 'N' THEN 2
        WHEN g.autos = 'N' AND g.trucks = 'N' AND g.motorcycles = 'Y' THEN 3
        ELSE -1
    END as vehicleTypes

FROM  g, f, d, a

WHERE  f.access_id = g.access_id
AND d.condition_id = f.condition_id
AND g.access_id = a.access_id

答案 1 :(得分:0)

您应该使用CASE WHEN阻止

例如在Oracle中: https://www.techonthenet.com/oracle/functions/case.php