powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Проблемная функция crosstab
3 сообщений из 3, страница 1 из 1
Проблемная функция crosstab
    #40027631
DeLipFin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет, помогите разобраться с функцией crosstab.
Имеется таблица ticket_history, в ней очень много столбцов нужные для меня всего 4 (ticket_id, name, history_type_id, create_time).
Но для одного ticketa используются очень много строк, а нужная информация хранится в name и history_type_id, которую я хочу развернуть на одну строку.

Например "ЗАПРОС 1" для 2х ticketa, который выдает результат (смотреть вложение), в ней я отметил нужные строки которые нужны мне.
Код: plsql
1.
2.
3.
select ticket_id, name, history_type_id, create_time from ticket_history
where ticket_id in (190961, 190938) 
order by 1 desc, 4 desc


Дальше для всех тикетов за месяц буду использовать запрос
Код: plsql
1.
create_time>=date_trunc('month', current_date)


Для вывода нужных строк использую данный "ЗАПРОС 2"
Код: plsql
1.
2.
3.
select ticket_id, name, history_type_id from ticket_history
where ticket_id in (190961, 190938) and (name like '%closed%' or name like '%SolutionTimeStart%' or name like '%SolutionTimeStop%')
order by 1 desc, 3


Попробовал преобразовать с помощью функции crosstab
Код: plsql
1.
2.
3.
4.
select *
from crosstab('select ticket_id, name, history_type_id from ticket_history
where ticket_id in (190961, 190938) and (name like ''%closed%'' or name like ''%SolutionTimeStart%'' or name like ''%SolutionTimeStop%'')
order by 1 desc, 3') as ct (ticket_id bigint, name text, history_type_id text)


Эту часть как только не переделывал либо ошибка выходит ERROR: return and sql tuple descriptions are incompatible,
либо ERROR: invalid return type DETAIL: SQL rowid datatype does not match return rowid datatype.

Хочу отметить, что в тикете могут повторятся history_type_id (42,43,44) соответственно с name

Либо помогите перевернуть полностью таблицу без условий
Код: plsql
1.
2.
3.
4.
5.
6.
SELECT *
FROM crosstab(
    'SELECT ticket_id, name, history_type_id
    FROM ticket_history
    ORDER BY 1'
) AS ct (ticket_id int, name1 varchar, name2 varchar)
...
Рейтинг: 0 / 0
Проблемная функция crosstab
    #40027640
DeLipFin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DeLipFin,

Забыл прикрепить результат запроса, теперь он тут
...
Рейтинг: 0 / 0
Проблемная функция crosstab
    #40027965
DeLipFin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переделал запрос, все логично но crosstab так и не заработал
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
CREATE EXTENSION tablefunc

select * from (select ticket_id, split_part(name,'%%',3) as name, history_type_id from ticket_history
	where create_time>=date_trunc('month', current_date) and (history_type_id in (27,41,44))) 
	as t where name in ('closed successful', 'triggered') order by 1,2
	 
select * from crosstab(
'select * from (select ticket_id, split_part(name,''%%'',3) as name, history_type_id from ticket_history
	where create_time>=date_trunc(''month'', current_date) and (history_type_id in (27,41,44))) 
	as t where name in (''closed successful'', ''triggered'') order by 1,2'
	) as ct(ticket_id varchar, "closed successful" varchar, triggered varchar) order by 1



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


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