2017-09-06 4 views
2

私はこの部分が必要な手順を作成していました。null値を持つ列名を印刷するoracle

col1 col2 col3  result 
a  null b  col2 
null d  null col1,col3 
c  e  null  col3 

col1 col2 col3 
a  null  b 
null d  null 
c  e  null 

出力は、我々はcase文を使用してそれを行うことができますか?

答えて

2

また、次のようにdecodeを使用します。

select t.*, 
    rtrim(decode(col1,null,'col1,',null) 
    || decode(col2,null,'col2,',null) 
    || decode(col3,null,'col3,',null),',') as result 
from t; 
1

あなたはcaseを使用することができます。OracleはNULL値として''を扱うので

select col1, col2, col3, 
     substr(((case when col1 is null then ',col1' else '' end) || 
       (case when col2 is null then ',col2' else '' end) || 
       (case when col3 is null then ',col3' else '' end) 
       ), 2) 
from t; 

厳密else ''に言えば、冗長です。しかし、この動作はほとんどのデータベースとは異なりますので、私はそれを含めるのが好きです。

+0

ありがとうございますlinoff私はそれを試してみましょう! – steve

+0

'substr'は末尾のカンマを「訂正」すると仮定しますが、' substr(input、2) 'は最後の文字ではなく最初の文字を切り捨てます。おそらく ''col1' 'の代わりに''、col1''などを意味していたでしょうか(末尾ではなく先行するコンマで) – mathguy

+0

SUBSTRの代わりにRTRIM関数を使って最後のカンマを削除します。 – Damith

関連する問題