我有一个要合并的两列查询
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
为每个人/组织分配了一个号码,我希望能够通过在组织号前面加上0并在人nnbr前面加上P来从一个人中识别组织
我要合并这两行,以便结果将O放在ORGNBR的前面,将P I放在PERSNBR的前面
预期结果
Owner
O 12345
P 12899
答案 0 :(得分:1)
嗯。 。 。我想我将其表达为:
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中口语化程度更高。
答案 1 :(得分:0)
您似乎想要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
答案 2 :(得分:0)
据我对问题的了解,使用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