Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 打印具有空值的列名_Sql_Oracle - Fatal编程技术网

Sql 打印具有空值的列名

Sql 打印具有空值的列名,sql,oracle,Sql,Oracle,我正在创建一个程序,我需要这个部分。 表格 col1 col2 col3 a null b null d null c e null 输出 col1 col2 col3 result a null b col2 null d null col1,col3 c e null col3 我们可以使用case语句吗?您可以使用case:

我正在创建一个程序,我需要这个部分。 表格

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

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

我们可以使用case语句吗?

您可以使用
case

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'
是多余的,因为Oracle将
'
视为
NULL
值。但是,我喜欢包含它,因为这种行为与大多数数据库不同。

您还可以使用decode,如下所示

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

谢谢林诺夫,我来试试!!我假设
substr
将“更正”尾随逗号,但是
substr(输入,2)
将切掉第一个字符,而不是最后一个字符。也许您的意思是
”、col1'
等。您可以使用RTRIM函数而不是SUBSTR来删除最后一个逗号,而不是
'col1'
。@mathguy。谢谢我把逗号放错地方了。@mathguy。。。达米思……林诺夫。。。谢谢:)