Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / трехмерная матрица в запросе / 3 сообщений из 3, страница 1 из 1
25.06.2008, 10:01
    #35392615
PythonWin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
трехмерная матрица в запросе
Всем привет!
Подскажите, пожалуйста как сделать эффект трехмерной матрицы с запросе?
Нужно получить следующую строку в запросе:
client.name, {{client1.id, client1.name, client1.debet}, {client1.id, client1.name, client1.debet}, {client1.id, client1.name, client1.debet}}, {{client2.id, client2.name, client2.debet}, {client2.id, client2.name, client2.debet},{client2.id, client2.name, client2.debet}}
где client1 и client2 - эта таже таблица клиентов, но у них разные условия (определяется в связанной таблице через INNER JOIN, LEFT JOIN).
пробовал так
Код: plaintext
select ARRAY(select row(client.*) from client)
но ругается
ERROR: could not find array type for datatype record

также пробовал привести все поля к одному типу:
Код: plaintext
select ARRAY(select ARRAY[client.id::text, client.name::text] from client)
в ответ ругается:
ERROR: could not find array type for datatype text[]
...
Рейтинг: 0 / 0
25.06.2008, 12:19
    #35393140
Ёш
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
трехмерная матрица в запросе
я лично не совсем понял что Вам нужно, но может быть этот пример будет чем-то полезен:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
seb=> create table t (id serial, n text, v int);
seb=> insert into t ( n, v ) select i,  10  - i from generate_series( 1 , 10 ) as x(i);
seb=> select * from t;
 id | n  | v
----+----+---
   1  |  1   |  9 
   2  |  2   |  8 
   3  |  3   |  7 
   4  |  4   |  6 
   5  |  5   |  5 
   6  |  6   |  4 
   7  |  7   |  3 
   8  |  8   |  2 
   9  |  9   |  1 
  10  |  10  |  0 
seb=> CREATE AGGREGATE array_accum_cat (anyarray)
(
    sfunc = array_cat,
    stype = anyarray,
    initcond = '{}'
);
seb=> select array_accum_cat(v) from (select array[array[id::text, n::text, v::text]] from t) as x(v);
                                   array_accum_cat
-------------------------------------------------------------------------------------
 {{ 1 , 1 , 9 },{ 2 , 2 , 8 },{ 3 , 3 , 7 },{ 4 , 4 , 6 },{ 5 , 5 , 5 },{ 6 , 6 , 4 },{ 7 , 7 , 3 },{ 8 , 8 , 2 },{ 9 , 9 , 1 },{ 10 , 10 , 0 }}
( 1  запись)


--
„Истина — это вовсе не то, что можно убедительно доказать, это то, что
делает всё проще и понятнее“ — Антуан де Сент-Экзюпери
...
Рейтинг: 0 / 0
25.06.2008, 12:28
    #35393179
PythonWin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
трехмерная матрица в запросе
Ёш , спасибо - помогло после небольшой корректировки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table t (id serial, n text, v int);
insert into t ( n, v ) select i,  10  - i from generate_series( 1 , 10 ) as x(i);
select * from t;
CREATE AGGREGATE array_accum_cat -- (anyarray)
(
    BASETYPE = anyarray,
    sfunc = array_cat,
    stype = anyarray,
    initcond = '{}'
);
select array_accum_cat(v) from (select array[array[id::text, n::text, v::text]] from t) as x(v);
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / трехмерная матрица в запросе / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]