2013-05-22 2 views
0

У меня есть таблица, хранящая информацию матрицы в формате:Таблица матричная в PostgreSQL

CREATE TABLE "column" (
    id   serial primary key, 
    name  varchar 
); 

CREATE TABLE matrix (
    id   serial primary key, 
    column_id integer references "column", 
    "row"  integer, 
    data  varchar 
); 

С данными выборки:

INSERT INTO "column"(name) VALUES ('column1'), ('column2'), ('column3'), ('column4'), ('column5'); 
INSERT INTO matrix(column_id, "row", data) VALUES (1, 1, '1, 1'), (1, 2, '1, 2'), (1, 3, '1, 3'), (1, 4, '1, 4'), (1, 5, '1, 5'), (2, 1, '2, 1'), (2, 2, '2, 2'), (2, 3, '2, 3'), (2, 4, '2, 4'), (2, 5, '2, 5'), (3, 1, '3, 1'), (3, 2, '3, 2'), (3, 3, '3, 3'), (3, 4, '3, 4'), (3, 5, '3, 5'); 

Что является наиболее эффективным способом, чтобы представить его в виде матрица?

column1 | column2 | column3 | column4 | column5 
----------------------------------------------- 
1, 1 | 1, 2 | 1, 3 | 1, 4 | 1, 5 
2, 1 | 2, 2 | 2, 3 | 2, 4 | 2, 5 
3, 1 | 1, 2 | 3, 3 | 3, 4 | 3, 5 
+0

Должен ли он быть чистым SQL? Потому что это данные представления, которые вы хотите изменить. Это не то, что должен делать слой базы данных, но что-то должно сделать бизнес-уровень или презентационный уровень вашего приложения. – pyrocumulus

+0

Ваш DDL, вероятно, не будет работать из-за использования зарезервированных слов. Отправьте фактический SQL, который вы использовали для создания ваших таблиц, а также образцы данных. –

+0

@sharpcloud Это должен быть SQL, поскольку мне нужно запросить матрицу позже. – Yossi

ответ

1

Вам, похоже, нужна кросс-таблица. В зависимости от версии postgres, которую вы используете, она уже может быть встроена. Если я прав, она построена с версии 9.0, и вы можете добавить модуль кросс-таблицы в версии 8.4.

Для получения дополнительной информации см. crosstab function documentation.

Смежные вопросы