sql - 在 Oracle SQL 中连接 CASE

标签 sql oracle concatenation case

我需要在许多列上运行CASE表达式,这些列是 bool 值,所以如果它是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

这能做到吗?如果不行还有其他方法吗?

最佳答案

是的,它会起作用(如果你清理语法)。这是一个简单的例子:

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

关于sql - 在 Oracle SQL 中连接 CASE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19039338/

相关文章:

php - 错误 “Undefined variable”

sql - 对于 A 列中的每个不同值,在一行中返回 B 列的所有不同值

mysql - SQL 总数

sql - 帮我找到数据 block

MYSQL:在 CONCAT() 函数中使用列名给出语法错误 1064

oracle - 防止 Oracle SQL Developer 在导出时截断 CLOB

sql - 如何在 PL/SQL 中捕获约束冲突?

SQL 结果在同一列上排序两次

sql - MySQL ORDER问题

sql - Oracle DB 等效于重复 key 更新