SQL Case语句派生新属性

时间:2017-11-21 08:16:26

标签: sql oracle

我有一张带有方向指示器的表格,基于此我需要派生一个新列,告诉它是IN还是Out

ORG_IN  ORG_OUT DEST_IN DEST_OUT    Direction
0   0   0   0   NULL
0   0   0   1   Out
0   0   1   0   In
0   1   0   0   Out
0   1   0   1   Out
0   1   1   0   NULL
1   0   0   0   In
1   0   0   1   NULL
1   0   1   0   In

这是生成方向的查询 http://sqlfiddle.com/#!4/a9f82/1

您认为它将涵盖所有组合的所有案例。现在我只能看到上面的组合。有更好的方法来编写sql。

1 个答案:

答案 0 :(得分:0)

select t.*, case ORG_IN + DEST_IN - ORG_OUT - DEST_OUT 
              when 2 then 'In'
              when 1 then 'In'
              when 0 then null
              when -1 then 'Out'
              when -2 then 'Out'
            end as Direction
from tablename t

我无法找出更多有效的组合。但是,我建议使用检查约束,确保没有输入无效组合:

check (ORG_IN + ORG_OUT < 2 and DEST_IN + DEST_OUT < 2)