Объединение случая и коалеса в одном столбце - PullRequest
0 голосов
/ 04 марта 2019

У меня есть запрос с двумя столбцами, которые я хочу объединить

Select 
  CASE WHEN ORGNBR IS NULL THEN ‘P’
       WHEN PERSNBR IS NULL THE. ‘O’
       Else null end as “owner”
  , coalesce (orgnbr,persnbr) as “owner num”
From table 

Результаты

Owner  | Owner Num
  O    | 12345
  P    | 12899

Каждому человеку / организации присвоен номер, и я хочу иметь возможность определитьorg от человека, поставив 0 перед числами org и P перед лицом nnbr

Я хочу объединить эти два ряда так, чтобы в результате O поместилось перед ORGNBR и PI frontПЕРСНБР

Ожидаемые результаты

 Owner  
  O  12345
  P 12899

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Хммм.,,Я думаю, я бы сформулировал это следующим образом:

SELECT (CASE WHEN ORGNBR IS NOT NULL THEN 'O' || orgnbr
             WHEN PERSNBR IS NOT NULL THEN 'P' || persnbr
        END) as owner
FROM table ;

(Вы можете добавить дополнительные столбцы, если хотите.)

Важно, что это меняет логику, поэтому она скорее "положительная", чем "отрицательная",То есть условия: «если orgnbr существует, то перед 'O'», а не «если orgnbr не существует, то затем 'P'».За последним труднее следовать, и он не учитывает больше категорий.

При этом также используется оператор concat, более разговорный в Oracle.

0 голосов
/ 04 марта 2019

Насколько я понимаю из вопроса, вам нужно использовать nvl2:

with t(orgnbr,persnbr) as
(
 select  null, 12345 from dual union all
 select 12899, null  from dual 
)    
select nvl2(persnbr,'O'||persnbr,'P'||orgnbr) as "Result"
  from t;

Result
O12345
P12899
0 голосов
/ 04 марта 2019

кажется, что вы хотите concat

Select 
  CASE WHEN ORGNBR IS NULL THEN 'P'
       WHEN PERSNBR IS NULL THEN 'O'
       Else null end  || coalesce (orgnbr,persnbr) as combine_row
From table 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...