powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / велосипед: [select] колонки меняем со строками (заданное количество колонок и строк)
2 сообщений из 2, страница 1 из 1
велосипед: [select] колонки меняем со строками (заданное количество колонок и строк)
    #39229214
Фотография Legushka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
количество колонок и строк заранее известно
это мое решение:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
with a as (select 1 as a, 2 as b, 3 as c, 4 as d
union select 2, 4, 6, 7
union select 3, 3, 2, 1
union select 4, 9, 8, 7
union select 5, 150, 200, 1
union select 6, 35, 234, 435
union select 7, 3, null, 234
union select 8, 4, 456, 123
order by a
)
select --(array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)]),
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][1:1]) as a, 
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][2:2]), 
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][3:3]),
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][4:4]),
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][5:5]),
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][6:6]),
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][7:7]),
unnest((array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)])[1:50][8:8])
from a 

ищу способы по проще
...
Рейтинг: 0 / 0
велосипед: [select] колонки меняем со строками (заданное количество колонок и строк)
    #39229316
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Legushka,

для транспонирования есть какие--то extension--ы [ранее известные как contrib--ы]

но вот так ещё можно
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
with a (a,b,c,d) as (select * FROM (values( 1, 2,3 ,4
),( 2, 4, 6, 7
),( 3, 3, 2, 1
),( 4, 9, 8, 7
),( 5, 150, 200, 1
),( 6, 35, 234, 435
),( 7, 3, null, 234
),( 8, 4, 456, 123
)
) foo
order by 1
)
, b (a,arr) AS (
select a,array[a,b,c,d]  FROM a
)
select
	unnest( (SELECT arr from b WHERE a=1 ))
	,unnest( (SELECT arr from b WHERE a=2 ))
	,unnest( (SELECT arr from b WHERE a=3 ))
	,unnest( (SELECT arr from b WHERE a=4 ))
	,unnest( (SELECT arr from b WHERE a=5 ))
	,unnest( (SELECT arr from b WHERE a=6 ))
	,unnest( (SELECT arr from b WHERE a=7 ))
	,unnest( (SELECT arr from b WHERE a=8 ))



хотя это не выглядит много проще вашего :
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
with a (a,b,c,d) as (select * FROM (values( 1, 2,3 ,4
),( 2, 4, 6, 7
),( 3, 3, 2, 1
),( 4, 9, 8, 7
),( 5, 150, 200, 1
),( 6, 35, 234, 435
),( 7, 3, null, 234
),( 8, 4, 456, 123
)
) foo
order by 1
)
, b (arr) AS (select (array[array_agg(a) ,array_agg(b) ,array_agg(c) ,array_agg(d)]) FROM a)
select
	unnest(arr[1:50][1:1])
	,unnest(arr[1:50][2:2]) 
	,unnest(arr[1:50][3:3])
	,unnest(arr[1:50][4:4])
	,unnest(arr[1:50][5:5])
	,unnest(arr[1:50][6:6])
	,unnest(arr[1:50][7:7])
	,unnest(arr[1:50][8:8])
from  b

...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / велосипед: [select] колонки меняем со строками (заданное количество колонок и строк)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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