Oracle 连接条件
Oracle concatenate with conditions
我需要用逗号连接来自不同列的数据。但是,该列也可能具有空值,因此不再需要之间的逗号。这意味着,它之间应该有逗号,但是如果 ADDR4 或 ADDR5 没有数据,那么它应该忽略添加的逗号
这是我试过的,但是当最后两列没有数据时它显示了额外的逗号
SELECT
ADDR1 ||','||ADDR2 ||','||ADDR3 ||','||ADDR4 ||','||ADDR5 作为地址,
来自地址数据
output with extra comma
包括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 为空(或)开头的连续列为空时,共享查询将 return 前导 ','。在这种情况下,需要检查所有先前的字段。
可能的解决方法是,
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
我需要用逗号连接来自不同列的数据。但是,该列也可能具有空值,因此不再需要之间的逗号。这意味着,它之间应该有逗号,但是如果 ADDR4 或 ADDR5 没有数据,那么它应该忽略添加的逗号
这是我试过的,但是当最后两列没有数据时它显示了额外的逗号
SELECT ADDR1 ||','||ADDR2 ||','||ADDR3 ||','||ADDR4 ||','||ADDR5 作为地址, 来自地址数据
output with extra comma
包括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 为空(或)开头的连续列为空时,共享查询将 return 前导 ','。在这种情况下,需要检查所有先前的字段。
可能的解决方法是,
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