Выбор строк в качестве столбцов

#sql #postgresql

#sql #postgresql

Вопрос:

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

 table foo:

id | name
---------
1  | foo
2  | oof
3  | ofo
4  | fob
5  | bof


table bar:

id | feature
------------
1  | bar
1  | arb
1  | rab
3  | 333
4  | ddd
4  | eee
  

И желаемый результат:

 id | name | feature | feature | feature
----------------------------------------
1  | foo  | bar     | arb     | rab
3  | ofo  | 333     |         |
4  | foo  | ddd     | eee     | 
  

Любая помощь очень ценится.

Ответ №1:

Вам необходимо установить модуль tablefunc. Затем вы можете написать запрос типа

 SELECT * 
FROM crosstab('SELECT id, name, feature 
               FROM foo 
               INNER JOIN bar on foo.id = bar.id') 
AS ct(id integer, name text, feature_1 text, feature_2 text, feature_3 text);
  

дополнительная информация http://www.postgresql.org/docs/9.1/static/tablefunc.html