2016-08-30 49 views
0

我们需要连接一个表中的一组列,并且我们需要围绕第三,第四,第五和第六个值的括号,但是如果列一片空白。Oracle 12c与包含空值的括号连接

SELECT "ID", 
      NVL(PART || '.'|| SECTION ||'(' ||SUB1||')'|| '(' ||SUB2|| ')'  || '('||SUB3||')' || '('||SUB4||')', '') as concatenated 
       FROM table1; 

只要有值,就将值正好放在正确的位置。当任何一个或多个列返回null时,我们为每个空值获取一组空括号。

如:113.203()()()()时,有四个空值 在这种情况下,我们需要:113.203

或者113.450(H)(2)(四)(在那里)是一个空值。 这里所需的结果 将是113.450(h)(2)(iv)

如何更改脚本以省略所有空括号时返回空值?

谢谢。

+0

你有没有尝试使用NVL函数为每列?然后你可以使用case语句修改列值 – hchaznedaroglu

回答

2

嗯,我想你想:

select id, 
     (part || '.' || section || 
     (case when sub1 is not null then '(' || sub1 || ')' end) || 
     (case when sub2 is not null then '(' || sub2 || ')' end) || 
     (case when sub3 is not null then '(' || sub3 || ')' end) || 
     (case when sub4 is not null then '(' || sub4 || ')' end) 
     ) as concatenated 
from table1; 
+0

完美!谢谢 – user761758