Postgresql от вертикали до горизонтали, одна таблица

#postgresql

#postgresql

Вопрос:

Я пытаюсь создать небольшой глоссарий в postgresql. До сих пор у меня есть таблица с некоторыми «вертикальными значениями»

 General_id  Sing_id     Synonim     Language
1           1               yes             en-GB
2           1               ja              de-DE
3           1               oui             fr-FR
4           2               no              en-GB
5           2               nein            de-DE
6           2               niet            ru-RU


SELECT 
    General_id,
    Sing_id,
    Synonim,
    Language
FROM table1.base
  

но я бы хотел, чтобы это было так:

 Sing_id   en_GB   de_DE   fr_FR   ru_RU    ...

  1         yes      ja      oui
  2         no       nein           niet    ...
  

Не хотели бы вы дать мне подсказку о том, как этого добиться?

Ответ №1:

Вы говорите о «повороте».

Смотрите Этот пост: поворот в Postgres

Пример из post:

 SELECT *
FROM crosstab(
  'SELECT
    a date,
    b.desc AS os,
    (random() * 10000   1)::int AS value
     FROM generate_series((now() - ''100 days''::interval)::date, now()::date, ''1 DAY''::interval) a,
          (SELECT unnest(ARRAY[''OSX'', ''Windows'', ''Linux'']) AS DESC) b ORDER BY 1,2
  ','SELECT unnest(ARRAY[''OSX'', ''Windows'', ''Linux''])'
) 
AS ct(date date, OSX int, Windows int, Linux int);
  

Комментарии:

1. Спасибо. Я попробую использовать функцию перекрестных таблиц. Я также нашел это: postgresql.org/docs/9.1/static/tablefunc.html