Объединить несколько значений и удалить символы, когда ноль - PullRequest
0 голосов
/ 28 ноября 2018

У меня есть запрос ниже

select id, CORD.LABEL ||' ('|| CORD.INTERVENT_TYPE || ')' ||' '||REFER.LABEL ||' ('|| REFER.INTERVENT_TYPE || ')'||' '|| INTER.LABEL ||' ('|| INTERVENT_TYPE || ')' AS INTERVEN_TYPE
from tableA

Это дает следующие результаты.

ID    INTERVEN_TYPE
1      () () Education(Other)

Я хотел бы отображать результаты только тогда, когда значения не равны нулю.Я ожидаю увидеть.

ID    INTERVEN_TYPE
1     Education(Other)

Я пробовал выражения case, nvl и coalesce.Какой из них будет работать лучше, так как я не могу создать правильный синтаксис?

1 Ответ

0 голосов
/ 28 ноября 2018

С CASE:

select 
id, 
TRIM(
CASE CORD.LABEL ||'('|| CORD.INTERVENT_TYPE || ')' 
    WHEN '()' THEN ''
    ELSE CORD.LABEL ||' ('|| CORD.INTERVENT_TYPE || ')' 
END 
||' '||
CASE REFER.LABEL ||'('|| REFER.INTERVENT_TYPE || ')'
    WHEN '()' THEN ''
    ELSE REFER.LABEL ||' ('|| REFER.INTERVENT_TYPE || ')'
END 
||' '|| 
CASE INTER.LABEL ||'('|| INTERVENT_TYPE || ')'
    WHEN '()' THEN ''
    ELSE INTER.LABEL ||' ('|| INTERVENT_TYPE || ')'
END 
)
AS INTERVEN_TYPE
from tableA

Теперь я удалил 1 пробел из левой скобки. EDIT : добавлена ​​функция TRIM.Может быть, это будет работать, если вы исключите () на REPLACE:

select 
id, TRIM(
REPLACE(CORD.LABEL ||' ('|| CORD.INTERVENT_TYPE || ')', '()')
||' '||
REPLACE(REFER.LABEL ||' ('|| REFER.INTERVENT_TYPE || ')', '()')
||' '|| 
REPLACE(INTER.LABEL ||' ('|| INTERVENT_TYPE || ')', '()')
) 
AS INTERVEN_TYPE
from tableA
...