Гость
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / crosstab / 4 сообщений из 4, страница 1 из 1
27.06.2017, 11:57
    #39478336
mrvap
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
crosstab
Доброго времени суток

есть таблица expcheck
expcheck_idexpcheck_expidexpcheck_typeidexpcheck_clsidexpcheck_created179472779140210161017"2017-04-21 15:59:22.605"179472879140210161018"2017-04-21 15:59:22.605"179813879140210161021"2017-04-28 13:10:03.229"179473279140210231024"2017-04-21 15:59:22.605"179473079140210231025"2017-04-21 15:59:22.605"179472979140210231026"2017-04-21 15:59:22.605"179813979140210231027"2017-04-28 13:10:03.229"179473179140210231028"2017-04-21 15:59:22.605"
Запрос:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
select exp_act, t.*
from exp
left join (select * FROM crosstab(
'select expcheck_expid, expcheck_clsid, expcheck_clsid from expcheck where expcheck_clsid in(1017,1018,1019,1020,1021,1022,1024,1025,1026,1027,1028)'::text,
'select distinct expcheck_clsid from expcheck where expcheck_clsid in(1017,1018,1019,1020,1021,1022,1024,1025,1026,1027,1028) order by expcheck_clsid'::text)
crosstab(exp_lab_expid integer, f1017 integer, f1018 integer, f1019 integer, f1020 integer, f1021 integer, f1022 integer, f1024 integer, f1025 integer, f1026 integer, f1027 integer, f1028 integer)
) t on t.exp_lab_expid=exp.exp_id
where (exp.exp_typeid = 2) and (((exp_datestart)>='01.01.2017') And ((exp_datestart)<='31.05.2017')) and (not exp_statusid=5) and exp_id=791402
order by exp_act


результат:
exp_act"exp_lab_expid""f1017""f1018""f1019""f1020""f1021""f1022""f1024""f1025""f1026""f1027""f1028"29979140210171018102410251026102829979140210211027
не понимаю почему разбивает на 2 строчки, когда должна быть одна. похоже колонка expcheck_created как то влияет но как и почему. помогите разобраться
...
Рейтинг: 0 / 0
27.06.2017, 12:21
    #39478362
p2.
p2.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
crosstab
mrvap,

Забудь про crosstab(), используй стандартные возможности - group by.
...
Рейтинг: 0 / 0
27.06.2017, 12:46
    #39478395
mrvap
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
crosstab
p2.,

Согласен, придется все переделывать на старый и надежный group by, только проблема, crosstab уже используется и очень удобен. а подобную хрень только сейчас увидел, в остальных случаях отрабатывает нормально. хотелось разобраться почему так происходит и как это решить.
с group by крайне не удобно - много значений
...
Рейтинг: 0 / 0
27.06.2017, 13:25
    #39478422
mrvap
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
crosstab
метод научного тыка сделал свое дело
Если кому поможет, то решается через
Код: plsql
1.
2.
CREATE OR REPLACE VIEW view_check AS 
 SELECT expcheck_expid,expcheck_clsid from expcheck group by expcheck_expid,expcheck_clsid


ну и естественно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
select t.*
from exp
left join (
select distinct  * FROM crosstab(
'select expcheck_expid, expcheck_clsid, expcheck_clsid from view_check where expcheck_clsid in(1017,1018,1019,1020,1021,1022,1024,1025,1026,1027,1028) '::text,
'select distinct expcheck_clsid from view_check where expcheck_clsid in(1017,1018,1019,1020,1021,1022,1024,1025,1026,1027,1028) order by expcheck_clsid'::text)
crosstab(exp_lab_expid integer, f1017 integer, f1018 integer, f1019 integer, f1020 integer, f1021 integer, 
f1022 integer, f1024 integer, f1025 integer, f1026 integer, f1027 integer, f1028 integer)
) t on t.exp_lab_expid=exp.exp_id
where (exp.exp_typeid = 2) and (((exp_datestart)>='01.01.2017') And ((exp_datestart)<='31.05.2017')) and (not exp_statusid=5)
and exp_id=791402


нужный результат
exp_lab_expid"f1017""f1018""f1019""f1020""f1021""f1022""f1024""f1025""f1026""f1027""f1028"79140210171018102110241025102610271028
...
Рейтинг: 0 / 0
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / crosstab / 4 сообщений из 4, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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