查询检索具有空值的列

时间:2014-05-01 12:04:40

标签: sql postgresql

考虑下表

+-----+-----+-----+-----+-----+-----+
|Col01|Col02|Col03|Col04|Col05|Col06|   <===header
+-----+-----+-----+-----+-----+-----+
|data1|data2|NULL |hi   |Hello|Folks|   <===a row
+-----+-----+-----+-----+-----+-----+

现在我想要一个返回列名(在本例中为COL03)的查询或作为结果的列号,它具有空值。

如何在PostgreSQL中实现这一目标?

3 个答案:

答案 0 :(得分:3)

会这样吗?

select case
       when col01 is null
       then 'col1'
       when col02 is null
       then 'col2'
       when col03 is null
       then 'col3'
       when col04 is null
       then 'col4'
       when col05 is null
       then 'col5'
       else null
       end
       which_col
from   tableX

如果你想动态构建它,我认为你必须采用程序化。您可以通过查询information_schema.columns获取列的名称。然后使用该信息创建这样的查询。

答案 1 :(得分:1)

这将返回表中具有空值的每列的行。

SELECT 'Col1' FROM MyTable WHERE col1 IS NULL
UNION ALL 
SELECT 'Col2' FROM MyTable WHERE col2 IS NULL
UNION ALL 
SELECT 'Col3' FROM MyTable WHERE col3 IS NULL

答案 2 :(得分:1)

这样的事情:

select 'col1' from Table1 where col1 is null
union all
select 'col2' from Table1 where col2 is null
....
union all
select 'colN' from Table1 where colN is null