Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Динамический PIVOT / 9 сообщений из 9, страница 1 из 1
01.03.2019, 11:24
    #39780842
dMazay82
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
Подскажите можно сделать так:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t1 as(
select '1' id, 'a' point, 'RunDate' param, '01.01.2001 01:12:11' val from dual union
select '1' id, 'a' point, 'param1a' param, '12' val from dual union
select '1' id, 'a' point, 'panam2a' param, 'Value' val from dual union
select '2' id, 'a2' point, 'RunDate' param, '02.02.2003 22:22:22' val from dual union
select '2' id, 'a2' point, 'param1a2' param, 'Test' val from dual union
select '2' id, 'a2' point, 'panam2a2' param, '15' val from dual union
select 'n' id, 'an' point, 'RunDate' param, '02.02.2003 22:22:22' val from dual union
select 'n' id, 'an' point, 'param1an' param, 'Test' val from dual union
select 'n' id, 'an' point, 'panam2an' param, '15' val from dual union
select 'n' id, 'an' point, 'panam3an' param, 'что-то' val from dual 
)
select * from t1;



Point'ов может быть сколько угодно, параметров тоже.

В конечном итоге хотелось бы получить возможность написать, звездочка фром тумбочка с условием.
Идеально, чтоб можно было во вьюху запихнуть, или это не реально?

select ..... from t1 where point = a and id >xx and param1a = Значение ;

результат
id point RunDate param1a panam2a1 a 01.01.2001 01:12:11 12Value.. a Все что попадетпод условие

select ..... from t1 where point = т and id >xx and panam2an = Значение ;
id point RunDate param1an panam2anpanam3ann an 02.02.2003 22:22:22 Test15 что-то.. an Все что попадетпод условие
...
Рейтинг: 0 / 0
01.03.2019, 11:33
    #39780851
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
dMazay82Идеально, чтоб можно было во вьюху запихнуть, или это не реально?Что должно было быть в *_tab_columns?
...
Рейтинг: 0 / 0
01.03.2019, 11:48
    #39780876
dMazay82
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
Elic,
в идеале динамический набор, который вернется для конкретного point, если я правильно понял вопрос
...
Рейтинг: 0 / 0
01.03.2019, 12:19
    #39780917
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
dMazay82если я правильно понял вопросНеправильно.
...
Рейтинг: 0 / 0
01.03.2019, 12:25
    #39780923
dMazay82
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
Elic,
Можно тогда по конкретнее?
...
Рейтинг: 0 / 0
01.03.2019, 12:28
    #39780929
env
env
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
dMazay82это не реально
...
Рейтинг: 0 / 0
01.03.2019, 12:33
    #39780937
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
dMazay82Можно тогда по конкретнее?Конкретнее некуда.
...
Рейтинг: 0 / 0
01.03.2019, 12:47
    #39780945
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
dMazay82Point'ов может быть сколько угодно, параметров тоже.

И опять PIVOT

1) делать на клиете - не подходит
3) запрос формировать динамически -не походит
2) хмл pivot - не уверен что удастся протолкнуть (запихнуть) условие аж "в хмл"
4) другое - ???

.....
stax
...
Рейтинг: 0 / 0
01.03.2019, 13:32
    #39780980
irbis_al
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический PIVOT
dMazay82,
Вы знаете ...у меня тоже такая была проблема...Посмотрите в аттачменте...отчет Шахматка.. где неизвестно заранее количество столбцов.
Я решил это своим генератором отчетов...мы его доработали...сначала Высчитывается общее количество столбцов и их имена...потом макроименем нон вставляется в запрос.
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
select * from (
select  grouping(g.name) gr,decode(g.name,null,'Итого',g.name) goodsname,decode(g.name,null,null,sum(dc.quantity)) quantity,
decode(g.name,null,null,g.FULLEXIT) fullexit,
g1.name goodsname1,sum(dc1.quantity) quantity1
from (select sum(quantity) quantity,goods_id,id from
 &shema.DOCUMENTSPRODUCECONTENTS dd where dd.document_id=:titles_id
 and dd.coming_id is  null group by id,goods_id)  dc,
(select sum(quantity) quantity,goods_id,coming_id from
 &shema.DOCUMENTSPRODUCECONTENTS dd1 where dd1.document_id=:titles_id
 and dd1.coming_id is not null group by coming_id,goods_id) dc1,
&shema.goods g,&shema.goods g1
where
 dc1.goods_id=g1.id and dc.goods_id=g.id
and dc.id=dc1.coming_id
group by rollup(g.name), g.FULLEXIT, g1.name
)
pivot (
 sum(quantity1)  for goodsname1
in (&crosspivot)
)
order by gr,goodsname



Вот вот это
Код: plsql
1.
2.
3.
4.
5.
6.
pivot (
 sum(quantity1)  for goodsname1
in (&crosspivot)
)

[color=yellow]crosspivot[/color]


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


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