我有一个SELECT语句(使用函数),它返回60列和大约10000行。 其中一些列只包含NULL值 - 我想从选择中排除它们。有没有办法做到这一点?
查询有点复杂,包括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');
答案 0 :(得分:0)
您可以明确指定要选择的列,例如:
SELECT ID, column1 FROM table;
或者您可以按照建议here进行操作并直接从架构中选择列,并排除您不想要的列:
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
编辑:在阅读guildsbounty's comment above后,我意识到如果你想动态地做这个答案,这个答案就无法提供帮助。