2014-10-17 61 views
0

我有一個SELECT語句(使用函數),它返回60列和大約10000行。 其中一些列只包含NULL值 - 我想從選擇中排除它們。有沒有辦法做到這一點?只選擇那些列,其中的值不爲NULL

查詢是一個有點複雜,包括tablfunc功能,但是效果非常好:

--------+-------+--------+---------+---------+ 
ID  |column1| column2| ...  |column60 | 
--------+-------+--------+---------+---------+ 
1  | 1  | NULL | 52.5 | 15  | 
... | ... | ... | ...  | ...  | 
10000 | 2  | NULL | 87.5 | 3  | 
--------+-------+--------+---------+---------+ 

在這種情況下,我不想選擇列2。

查詢是:

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'); 
+1

如果您隱藏它,我們如何幫助您查詢? – Paolo 2014-10-17 13:04:47

+3

你是否試圖使這項工作動態?如在一個列中,如果一個列完全爲空,那麼它就會立即忽略它,但是如果一個值被添加到該列中,它將返回整個列? – guildsbounty 2014-10-17 13:04:53

+0

Guildsbounty: 這是正確的。 – 2014-10-17 13:16:39

回答

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之後,我意識到如果你想動態地做到這一點,這個答案不會有幫助。

+1

謝謝,但我確實希望它動態地做到這一點。我也不能編輯功能 - 但在這種情況下,這可能會有所幫助。 – 2014-10-17 13:20:23