【发布时间】:2018-09-20 11:57:55
【问题描述】:
SQL 问题: 如何从并非所有值都为空的列中获取所有列值?
表 A
COL1 COL2 COL3 COL4 COL5
---------------------------------------
abc 1 NULL NULL NULL
def 2 NULL testA NULL
NULL 3 NULL testB NULL
jkl 4 NULL NULL NULL
我想得到
COL1 COL2 COL4
-----------------------
abc 1 NULL
def 2 testA
NULL 3 testB
jkl 4 NULL
是否有 sql 或 plsql 解决方案来实现这一点? 为了避免不相关的答案:假设我有一百万行。 我希望结果是视图或结果表。 不是书面输出。
我发现了一个类似的问题,但它不能满足我的需要: How to select columns from a table which have non null values?
通过这个查询可以快速抓取列名
select column_name
from all_tab_columns
where lower(table_name)='tableA' and num_distinct > 0;
我知道我可以创建一个带有光标的脚本,然后循环遍历它,将结果添加到新表或视图中。 这不是我需要的。我想知道这是否可以使用单个查询、使用 pivot/unpivot 或其他方法来完成。
【问题讨论】:
-
请不要使用不适用于您的问题的标签。我删除了数据库标签,因为不清楚您实际使用的是哪一个。请添加only你实际使用的数据库的标签
-
所以你想要根据表数据不同的列数?好吧,SQL 不是这样工作的,结果集列是在编译时定义的,在读取任何数据之前。