在函數內我在SELECT
表達式中有很長的列列表。select_list中的條件:只取某些列
該函數在前端的各個點被調用。但是,有兩種情況:在一種情況下,我想讓該函數在其SELECT列表中列出的所有列。在另一個我只想要有一半。要獲取的列取決於在前端設置的功能參數withAdditionalStuff
。
當然,在這兩種情況下,列所有行相同:
withAdditionalStuff = false
意味着:返回columnA,columnB,columnC ......所有行withAdditionalStuff = true
意味着它應該返回columnA,所有行的列B,列C,列D,列E,列F ...。
所以,我需要的是這樣的:
SELECT many_columns_here ..... IF `withAdditionalStuff` = TRUE
THEN many_many_other_columns_here... END IF; FROM....
但是,這並不工作。
但是,如果我將CASE 'withAdditionalStuff' = TRUE THEN some_column END AS some_column
中的每一列封裝起來,當然不是完全省略列,PostgreSQL總是返回列some_column
。所以,當我的函數設置withAdditionalStuff
爲false時,我會得到很多空列。除此之外,在CASE WHEN
內包裝數十個列標題是非常煩人的。
有沒有一種方法可以在SELECT
列表中有一個條件表達式來確定要獲取哪些列以及完全忽略哪些列?
該函數返回其結果作爲jsonb。
我正在使用PostgreSQL 9.4.4。
我不清楚你想達到什麼目的。如果你想爲每一行使用不同數量的列,那麼沒有這是不可能的。請[編輯]你的問題,並根據這些數據添加一些樣本數據和預期的輸出。 (請格式化文本,[無截圖](http://meta.stackoverflow.com/questions/285551/why-may-i-not-upload-images-of-code-on-so-when-asking-a-問題/ 285557#285557)) –
我改變了措辭,希望現在更清楚。我不認爲這裏的樣本數據會很有用,因爲數據內容不相關。 – cis
你爲什麼不簡單地創建兩個視圖?一個是所有列,一個是隻有你需要的列? –