У меня есть таблица в Postgres, которая была предназначена для захвата информации в неструктурированной форме и ее восстановления. Мне нужно повторно применить некоторую структуру при экспорте данных из этой таблицы, и я боюсь.Поворот произвольно многих строк в столбцы в PostgreSQL
В настоящее время у меня есть таблица вида:
lbl | name | value
----|------------|--------
1 | num | 1
1 | colour | "Red"
1 | percentage | 25.0
2 | num | 2
2 | colour | "Green"
2 | percentage | 50.0
3 | num | 3
3 | colour | "Blue"
3 | percentage | 75.0
И мне нужно, чтобы создать таблицу в таком виде:
lbl | num | colour | percentage
----|-----|---------|------------
1 | 1 | "Red" | 25.0
2 | 2 | "Green" | 50.0
3 | 3 | "Blue" | 75.0
Я построил этот запрос:
SELECT lbl,
max(case when name = 'num' then value else '-' end) num,
max(case when name = 'colour' then value else '-' end) colour,
max(case when name = 'percentage' then value else '-' end) percentage
FROM example_table
GROUP BY lbl
Запрос работает, но мне нужно его расширить, чтобы включить произвольное количество потенциальных значений для имени. Я исследовал crossfunc, но не смог заставить его работать так, как я предполагал. Любая помощь будет принята с благодарностью.
Я создал sqlfiddle здесь, чтобы помочь пнуть вещи: http://sqlfiddle.com/#!9/8d3133/6/0
редактировать: Я могу использовать PL/PgSQL также, если это делает это возможным.
Я думаю, вам нужно использовать динамический SQL здесь. –
"* включает произвольное количество потенциальных значений для имени *", что невозможно в простом SQL. Количество столбцов запроса должно быть известно в базе данных _before_, выполняющей запрос. –
ах, хорошо. Если у меня есть доступ к использованию plsql, это может сработать? – George