2

多数の列で式を実行する必要がありCASEます。列はブール値であるため、0 の場合は列に列名を入力する必要があり、1 の場合は列/値を無視します。次に、これらすべての列を 1 つに連結する必要があります。Oracle SQLでこれを行うことは可能ですか?

私はこれを試しました:

Select
    ||CASE
       WHEN COL_A = 0 THEN 'COL_A'
       ELSE ''
    END||','
    ||CASE
       WHEN COL_B = 0 THEN 'COL_B'
       ELSE ''
    END||
from ABC.123

これもできますか?この方法ではない場合、他の方法はありますか?

4

1 に答える 1

5

はい、動作します (構文をクリーンアップした場合)。簡単な例を次に示します。

with q as (
select 0 col_a, 1 col_b, 'Rec 1' id from dual
union all
select 1, 0, 'Rec 2' from dual
union all
select 0, 0, 'Rec 3' from dual
)
Select id, 
    CASE
       WHEN COL_A = 0 THEN 'COL_A'
       ELSE ''
    END||','
    ||CASE
       WHEN COL_B = 0 THEN 'COL_B'
       ELSE ''
    END "TheString"
from q

結果:

ID      TheString
------- -------------------   
Rec 1   COL_A,
Rec 2   ,COL_B
Rec 3   COL_A,COL_B
于 2013-09-26T23:52:53.800 に答える