连接列值

时间:2017-08-16 21:22:53

标签: sql oracle11g

我尝试连接列的值,但必须将值格式化为另一个字符串。

这是我的表:

 C1         C2                      c3                  c4
---------   ---------               ------              --------
ID1         28-OCT-16 11.59.00      (null)              04-OCT-16 08.48.00
ID2         (null)                  05-OCT-16 02.55.00  (null)  
ID3         (null)                  10-OCT-16 04.32.00  21-OCT-16 02.25.00
ID4         10-OCT-16 04.32.00      18-OCT-16 08.52.00  18-OCT-16 08.32.00
ID5         10-OCT-16 04.32.00      (null)              (null)

我已经完成了格式化表格以匹配我需要的值。

select 
    c1 T_ID,
    case when c2 is not null then 'Plane' end PLANE,
    case when c3 is not null then 'BUS' end BUS,
    case when c4 is not null then 'Hotel' end HOTEL
    from table1 
order by 1;




T_ID        PLANE                   BUS                 HOTEL
---------   ---------               ------              --------
ID1         Plane                   (null)              Hotel
ID2         (null)                  BUS                 (null)  
ID3         (null)                  BUS                 Hotel
ID4         Plane                   BUS                 Hotel
ID5         Plane                   (null)              (null)

我试图做以下事情

T_ID        SERVICE         
---------   ---------       
ID1         Plane+Hotel         
ID2         BUS         
ID3         BUS+Hotel           
ID4         Plane+BUS+Hotel         
ID5         Plane   

我尝试了几个连接功能,但无法找到我正在寻找的结果。

1 个答案:

答案 0 :(得分:1)

你基本上可以这样做:

select c1 T_ID,
       substr( (case when c2 is not null then '+Plane' end) ||
               (case when c3 is not null then '+BUS' end) ||
               (case when c4 is not null then '+Hotel' end)
               2)
from table1 
order by 1;

这基本上通过将分隔符放在字符串中每个组件的开头来实现函数concat_ws()。外substr()删除第一个字符。