在函数内我在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
你为什么不简单地创建两个视图?一个是所有列,一个是只有你需要的列? –