【问题标题】:Accessing a column by it's name in POSTGRESQL在 POSTGRESQL 中按列名访问列
【发布时间】:2015-08-08 15:35:38
【问题描述】:

我有下表:

column_name | a | b
--------------------
     a      | 0 | 1 
--------------------
     b      | 2 | 3

是否可以编写一个将返回的选择语句:

result
------
   0
   3

(我想根据 column_name 中指定的名称选择一列)

诀窍是我不知道我将拥有多少列以及它们的名称(除了 column_name 列)

我无法创建临时表、函数等。是的,这是我大学 SQL 课程任务的一部分,还不是任务本身,所以我相信我可以在这里寻求帮助。

【问题讨论】:

  • 我敢肯定,SQL课程提供的问题更清楚......
  • 您需要动态 SQL。阅读 PL/PgSQL 的 EXECUTE 命令。或者,也许您正在寻找交叉制表/数据透视表,在这种情况下,您需要来自 tablefunc 扩展的 crosstab 函数。

标签: sql postgresql information-schema


【解决方案1】:
select case when column_name='b' then b else a end
from ...

基本上?不仅仅是几列,它会变得非常丑陋乏味

【讨论】:

  • 我忘了说明这只是一个示例,我不知道该任务中的列数或它们的名称。我更新了问题,所以它现在就说出来了。
  • 那么你将不得不使用动态 sql。例如select column_name,然后构建一个新的 sql 字符串到 select value_retrieved_from_other_query 并执行该语句。您不能将查询的一部分中的“值”用作同一查询中其他地方的 sql 关键字或字段/表名称。
【解决方案2】:

您可以使用 postgresql json 数据类型(及其相关功能):

select row_to_json(table_name)->>(row_to_json(table_name)->>'column_name') from table_name;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 2011-03-23
    • 1970-01-01
    相关资源
    最近更新 更多