带有条件的多列上的 CASE WHEN 表达式

Posted

技术标签:

【中文标题】带有条件的多列上的 CASE WHEN 表达式【英文标题】:CASE WHEN expression over multiple columns with conditions 【发布时间】:2019-06-20 11:20:23 【问题描述】:

我有以下带有数据的输入列

Type1       Time1     Type2    Time2    Type3      Time3
Linehaul    3        Trans      2       Sort       1
Trans       5        Sort       2       Linehaul   2  

输出应该如下所示,末尾有一个新列,它从之前的列中选择排序时间 WHERE type 1 or type 2 or type 3 = Sort 单词 Sort 只能在前三种类型中的任何一种中出现一次。 代码应该出现在 SQL Oracle 中

Type1       time1    Type2  time2   Type3     time3    Trans time for sort
Linehaul    3        Trans  2       Sort      1         1
Trans       5        Sort   2       Linehaul  2         2

【问题讨论】:

【参考方案1】:

你可以很简单地做到这一点。例如

with tab as(
  select 'Linehaul' as c1,   3 as val1,  'Trans'as c2,      2 as val2,       'Sort' as c3,       1 as val3  from dual union all
  select 'Trans',       5,        'Sort',       2 ,      'Linehaul',   2   from dual

)
select t.* 
      ,case 
        when t.c1 = 'Sort' then val1
        when t.c2 = 'Sort' then val2
        when t.c3 = 'Sort' then val3
        else -1
          end as X
from tab t

【讨论】:

以上是关于带有条件的多列上的 CASE WHEN 表达式的主要内容,如果未能解决你的问题,请参考以下文章

CASE 表达式 - 在 WHEN 部分再添加一个条件

SQL语句中case,when,then的用法

SQL条件语句(IF, CASE WHEN, IF NULL)

MySQL 的CASE WHEN 语句

oracle中case when使用

mysql 中 case when then .... else end 的简单使用