2

我需要CASE在多个列上运行表达式,这些列是布尔值,所以如果它是 0,我需要用列名填充列,如果它是 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 回答