powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / crosstab
5 сообщений из 5, страница 1 из 1
crosstab
    #39498486
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
select * from crosstab(
'SELECT n_etap,
  round(avg(t_steel)::numeric,1),round(avg(t_borov)::numeric,1), round(avg(t_left_regen)::numeric,1),round(avg(t_right_regen)::numeric,1),round(avg(t_gaz_pech)::numeric,1),round(avg(t_mazut_pech)::numeric,1),
  round(avg(t_air_kompress)::numeric,1),round(avg(f_air)::numeric,1),round(avg(f_mazut)::numeric,1),round(avg(f_gaz)::numeric,1),round(avg(f_air_kompress)::numeric,1),round(avg(f_air_inten)::numeric,1),round(avg(f_air_rasp)::numeric,1),
  round(avg(p_pech)::numeric,1),round(avg(p_borov)::numeric,1),round(avg(p_gaz_pech)::numeric,1),round(avg(p_gaz_left_burn)::numeric,1),round(avg(p_gaz_right_burn)::numeric,1),round(avg(p_air)::numeric,1),round(avg(p_air_kompress)::numeric,1),
  round(avg(p_air_rasp_left_burn)::numeric,1),round(avg(p_air_rasp_right_burn)::numeric,1),round(avg(dym_percent)::numeric,1),round(avg(air_percent)::numeric,1),round(avg(gaz_l_plavka)::numeric,1),
  round(avg(gaz_r_plavka)::numeric,1),round(avg(fakel_l_set)::numeric,1),round(avg(fakel_r_set)::numeric,1)
FROM real_time_data_mp2
WHERE n_plavka=1140
GROUP BY n_etap order by n_etap asc'
)
as
t(
c int,c1 numeric,c2 numeric,c3 numeric,c4 numeric,c5 numeric,c6 numeric,c7 numeric,c8 numeric,c9 numeric,c10 numeric
);



ругается "The provided SQL must return 3 columns: rowid, category, and values" что же не так, вроде всё по мурзилке...
...
Рейтинг: 0 / 0
crosstab
    #39498510
p2.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888,

Использование через-жопу-функции со строковым литералом запроса ничем не лучше эмуляции pivot через стандартные возможности sql.
...
Рейтинг: 0 / 0
crosstab
    #39498511
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
p2.wild888,

Использование через-жопу-функции со строковым литералом запроса ничем не лучше эмуляции pivot через стандартные возможности sql.

)) а по существу?
...
Рейтинг: 0 / 0
crosstab
    #39498862
wild888
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вдруг кому пригодится:
Код: sql
1.
2.
3.
4.
5.
SELECT *  FROM   crosstab('SELECT unnest(''{//you column}''::text[]) AS col,row_number() OVER (),
                           unnest(ARRAY[//you column]) AS val
                           FROM //table
                           Where ... GROUP BY //name column ORDER BY generate_series(1,//you column count), 2')
                               t (//name column out) ;
...
Рейтинг: 0 / 0
crosstab
    #39499776
qwwq
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wild888p2.wild888,

Использование через-жопу-функции со строковым литералом запроса ничем не лучше эмуляции pivot через стандартные возможности sql.

)) а по существу?
известные способы -- сгенерировать кучу
Код: sql
1.
,case col_id when ... then max(val) END AS $colname$


или же кучу
Код: sql
1.
,(SELECT val FROM foo where col_id - ...) AS $colname$


//лучше от сте-шной выборки

или вот сейчас можно взять
Код: sql
1.
2.
3.
4.
5.
... json_to_record(json_object(
	array_agg( key)
	,array_agg( val::text)
)
AS ($colname$ $type$[,$colname$ $type$...]) -- сгенерировать




в общем для любителей злого пивота злобного ЕАВ-а пути есть. но нет динамического.

вероятно можно придумать оператор умножения record * set , где record поставлял бы пивот--колонки (в именах, и ключи в значениях), и чтобы не требовалось агрегирования set-а
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / crosstab
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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