Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/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 仅选择那些值不为NULL的列_Sql_Postgresql_Select - Fatal编程技术网

Sql 仅选择那些值不为NULL的列

Sql 仅选择那些值不为NULL的列,sql,postgresql,select,Sql,Postgresql,Select,我有一个SELECT语句(使用函数),它返回60列和大约10000行。 其中一些列只包含空值-我想从选择中排除它们。有没有办法做到这一点 查询有点复杂,包括tablfunc函数,但结果非常好: --------+-------+--------+---------+---------+ ID |column1| column2| ... |column60 | --------+-------+--------+---------+---------+ 1 | 1

我有一个SELECT语句(使用函数),它返回60列和大约10000行。 其中一些列只包含空值-我想从选择中排除它们。有没有办法做到这一点

查询有点复杂,包括tablfunc函数,但结果非常好:

--------+-------+--------+---------+---------+
 ID     |column1| column2| ...     |column60 | 
--------+-------+--------+---------+---------+
 1      | 1     | NULL   | 52.5    | 15      |
 ...    | ...   | ...    | ...     | ...     |
 10000  | 2     | NULL   | 87.5    | 3       |
--------+-------+--------+---------+---------+
在这种情况下,我不想选择column2

查询是:

  select * from dma.ct_fafajkod_pont
  ('select a.pont, a.faj, a.tom from 
         (select 
                    f.ppont_azon pont,
                    fl.mezonev faj,
                    case WHEN f.tom08::integer=1 then 2.5 WHEN f.tom08::integer=2 then 12.5 WHEN f.tom08::integer=3 then 35 WHEN tom08::integer=4 then 75 else 0 END +
                    case WHEN f.tom920::integer=1 then 2.5 WHEN f.tom920::integer=2 then 12.5 WHEN f.tom920::integer=3 then 35 WHEN tom920::integer=4 then 75 else 0 END +
                    case WHEN f.tom2135::integer=1 then 2.5 WHEN f.tom2135::integer=2 then 12.5 WHEN f.tom2135::integer=3 then 35 WHEN tom2135::integer=4 then 75 else 0 END +
                    case WHEN f.tom3650::integer=1 then 2.5 WHEN f.tom3650::integer=2 then 12.5 WHEN f.tom3650::integer=3 then 35 WHEN tom3650::integer=4 then 75 else 0 END +
                    case WHEN f.tom51::integer=1 then 2.5 WHEN f.tom51::integer=2 then 12.5 WHEN f.tom51::integer=3 then 35 WHEN tom51::integer=4 then 75 else 0 END tom
                    from field.fafaj f, field.fafajlista fl where f.fajnev=fl.fafaj_kulcs ) a
            order by 1,2', 
  'select distinct fl.mezonev from field.fafajlista fl order by 1');

您可以显式指定要选择的列,如:

SELECT ID, column1 FROM table;
或者,您可以按照建议执行操作,直接从架构中选择列,并排除不需要的列:

SELECT 'SELECT ' || array_to_string(ARRAY(SELECT 'o' || '.' || c.column_name
        FROM information_schema.columns As c
            WHERE table_name = 'officepark' 
            AND  c.column_name NOT IN('officeparkid', 'contractor')
    ), ',') || ' FROM officepark As o' As sqlstmt

编辑:阅读后,我意识到如果您想动态地进行查询,这个答案将毫无帮助。

如果您将查询隐藏起来,我们如何帮助您?您是否试图动态地进行查询?如中所示,如果一列完全为空,则动态忽略它,但如果向该列添加值,则返回整个列?GuidsBounty:没错。查询不是秘密,我将发布它,但我确实希望它动态执行。我也不能编辑函数-但在这种情况下,这可能会有所帮助。