Доступ к столбцу по его имени в POSTGRESQL

У меня есть следующая таблица:

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

Можно ли написать оператор выбора, который вернет:

result
------
   0
   3

(Я хочу выбрать столбец в зависимости от имени, указанного в column_name)

Хитрость в том, что я не знаю, сколько столбцов у меня будет и каковы будут их имена (кроме столбца column_name)

Я не могу создавать временные таблицы, функции и так далее. Да, это часть задачи курса SQL в моем университете, но не сама задача, так что я думаю, что могу попросить о помощи здесь.


person Michał Glapa    schedule 26.05.2015    source источник
comment
Я уверен, что курс SQL дает более ясный вопрос ...   -  person Erwin Brandstetter    schedule 27.05.2015
comment
Вам понадобится динамический SQL. Прочтите команду EXECUTE в PL / PgSQL. Или, может быть, вы ищете кросс-таблицу / сводную таблицу, и в этом случае вам нужна функция crosstab из расширения tablefunc.   -  person Craig Ringer    schedule 27.05.2015


Ответы (2)


select case when column_name='b' then b else a end
from ...

по сути? было бы невероятно уродливо утомительно больше, чем пара столбцов

person Marc B    schedule 26.05.2015
comment
Я забыл указать, что это всего лишь пример и что я не знаю ни количество столбцов, ни их имена в этой задаче. Я обновил вопрос, теперь он говорит об этом. - person Michał Glapa; 26.05.2015
comment
тогда вам придется использовать динамический sql. например select column_name, затем создайте новую строку sql для select value_retrieved_from_other_query и выполните этот оператор. вы не можете использовать значения из одной части запроса в качестве ключевых слов sql или имен полей / таблиц в другом месте того же запроса. - person Marc B; 26.05.2015

Вы можете использовать тип данных postgresql json (и связанные с ним функции):

select row_to_json(table_name)->>(row_to_json(table_name)->>'column_name') from table_name;
person Radek Postołowicz    schedule 26.05.2015