我尝试连接列的值,但必须将值格式化为另一个字符串。
这是我的表:
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
我尝试了几个连接功能,但无法找到我正在寻找的结果。
答案 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()
删除第一个字符。