Oracle连接条件



我需要用逗号连接来自不同列的数据。但是,该列也可能具有空值,因此不再需要中间的逗号。也就是说,它之间应该有逗号但是如果ADDR4或ADDR5没有数据,那么它应该忽略添加的逗号

这是我尝试的但是它显示了额外的逗号当最后两列没有数据

选择ADDR1 | |"、"| | ADDR2 | |"、"| | ADDR3 | |"、"| | ADDR4 | |"、"| | ADDR5地址,从ADDRDATA

带额外逗号的输出

包括CASE(或DECODE),例如

select addr1 || case when addr2 is not null then ','|| addr2 end
|| case when addr3 is not null then ','|| addr3 end
|| case when addr4 is not null then ','|| addr4 end
|| case when addr5 is not null then ','|| addr5 end as address
from addrdata

对#Littlefoot的一个小更正。当addr1为空(或开始的连续列为空)时,共享查询将返回前导' '。在这种情况下,需要检查前面的所有字段。

一个可能的解决方法是:

SELECT RTRIM ( CASE WHEN addr1 IS NOT NULL THEN addr1 || ',' ELSE NULL END
|| CASE WHEN addr2 IS NOT NULL THEN addr2 || ',' ELSE NULL END
|| CASE WHEN addr3 IS NOT NULL THEN addr3 || ',' ELSE NULL END
|| CASE WHEN addr4 IS NOT NULL THEN addr4 || ',' ELSE NULL END
|| CASE WHEN addr5 IS NOT NULL THEN addr5 || ',' ELSE NULL END, ',')
AS address
FROM addrdata

使用DECODE的一个解决方法是这样的,

SELECT RTRIM (   DECODE (addr1, NULL, NULL, addr1 || ',')
|| DECODE (addr2, NULL, NULL, addr2 || ',')
|| DECODE (addr3, NULL, NULL, addr3 || ',')
|| DECODE (addr4, NULL, NULL, addr4 || ',')
|| DECODE (addr5, NULL, NULL, addr5 || ','),
','
) AS address
FROM addrdata

最新更新