考虑下表
+-----+-----+-----+-----+-----+-----+
|Col01|Col02|Col03|Col04|Col05|Col06| <===header
+-----+-----+-----+-----+-----+-----+
|data1|data2|NULL |hi |Hello|Folks| <===a row
+-----+-----+-----+-----+-----+-----+
现在我想要一个返回列名(在本例中为COL03
)的查询或作为结果的列号,它具有空值。
如何在PostgreSQL中实现这一目标?
答案 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