CftClub.ru
Клуб специалистов ЦФТ-Банк

grouping_sets - как использовать?

 
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы
Предыдущая тема :: Следующая тема  
Автор Сообщение
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеВт Июл 02, 2013 07:15   grouping_sets - как использовать? Ответить с цитатой
Полезность: Нет оценки
Добрый день.
Примеров использования grouping_sets на форуме не нашел.
Подскажите, как его пользовать?

Такой вот код
Код:
......
group by grouping_sets(
   (f.HOUSE )                
  , (f.PERSONAL_AC)
--, (f.HOUSE, f.PERSONAL_AC)
)

Транслируется в
Код:
group by GROUPING SETS(a1.HOUSE,a1.PERSONAL_AC);

Сомневаюсь, что это правильно. По-мему, должно быть так:
Код:
group by GROUPING SETS((a1.HOUSE),(a1.PERSONAL_AC));

А вот закомментированный участок вообще не компилирует! Как получить такое:
Код:
group by GROUPING SETS((a1.HOUSE),(a1.PERSONAL_AC), (a1.HOUSE, a1.PERSONAL_AC));
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеЧт Июл 04, 2013 05:49   Re: grouping_sets - как использовать? Ответить с цитатой
Полезность: Нет оценки
Damir пишет:

А вот закомментированный участок вообще не компилирует! Как получить такое:
Код:
group by GROUPING SETS((a1.HOUSE),(a1.PERSONAL_AC), (a1.HOUSE, a1.PERSONAL_AC));


Random -чик, где ты, помоги....
Хоть скажи, это глюк и ваще никак или я просто готовить не умею?
Amper
Профи


Вступление в Клуб: 29.10.2010
СообщениеЧт Июл 04, 2013 08:41   Re: grouping_sets - как использовать? Ответить с цитатой
Полезность: 1
Damir пишет:
Добрый день.
Примеров использования grouping_sets на форуме не нашел.
Подскажите, как его пользовать?

Такой вот код
Код:
......
group by grouping_sets(
   (f.HOUSE )                
  , (f.PERSONAL_AC)
--, (f.HOUSE, f.PERSONAL_AC)
)

Транслируется в
Код:
group by GROUPING SETS(a1.HOUSE,a1.PERSONAL_AC);

Сомневаюсь, что это правильно. По-мему, должно быть так:
Код:
group by GROUPING SETS((a1.HOUSE),(a1.PERSONAL_AC));

А вот закомментированный участок вообще не компилирует! Как получить такое:
Код:
group by GROUPING SETS((a1.HOUSE),(a1.PERSONAL_AC), (a1.HOUSE, a1.PERSONAL_AC));

Попробуйте так:
Код:
......
group by grouping_sets(
   set(f.HOUSE )                
  , set(f.PERSONAL_AC)
, set(f.HOUSE, f.PERSONAL_AC)
)

и будет вам счастье.
vtar
Эксперт


Вступление в Клуб: 20.03.2009
СообщениеЧт Июл 04, 2013 08:43    Ответить с цитатой
Полезность: Нет оценки
в отчотности есть такого вида куски кода, может чем поможет, я в теме не копенгаген

[code]
for (
select x
( nvl(x.[COUNTRY].[CODE], '999') : C_COUNTRY_CODE
, nvl(x.[COUNTRY].[NAME], 'страна не определена') : C_COUNTRY_NAME
, x.[FINTOOL].[CODE_ISO] : C_CUR_CODE
, nvl(&get_param('CODE_VO'),nvl(x.[I_117_CODE].[FULL_CODE], '00000')) : C_OP_CODE
, round( sum( case when x.[TUNING].[CODE] = '2.1.'
then nvl(x.[SUMMA_THS],0)
else 0 end)
, 3) : C_SPIS

, round( sum( case when x.[TUNING].[CODE] = '2.2.'
then nvl(x.[SUMMA_THS],0)
else 0 end)
, 3) : C_ZACH
, grouping(nvl(&get_param('CODE_VO'),nvl(x.[I_117_CODE].[FULL_CODE], '00000'))) : C_GRP
) in ::[F_664_DATA]
where x.[PARAM] = P_PARAM and x.[TUNING].[CODE] like '2.%'
group by GROUPING_SETS
(
set (x.[COUNTRY].[CODE],x.[COUNTRY].[NAME],x.[FINTOOL].[CODE_ISO],nvl(&get_param('CODE_VO'),nvl(x.[I_117_CODE].[FULL_CODE], '00000'))),
set (x.[COUNTRY].[CODE],x.[COUNTRY].[NAME],x.[FINTOOL].[CODE_ISO]),
set (x.[COUNTRY].[code],x.[COUNTRY].[NAME])
)
order by 1, 3 asc nulls first, 4 asc nulls first
)
loop

end loop;
[/code]
Damir
Участник - экстремал


Вступление в Клуб: 29.03.2013
СообщениеЧт Июл 04, 2013 09:40   Re: grouping_sets - как использовать? Ответить с цитатой
Полезность: Нет оценки
Amper пишет:
Попробуйте так:
Код:
......
group by grouping_sets(
   set(f.HOUSE )                
  , set(f.PERSONAL_AC)
, set(f.HOUSE, f.PERSONAL_AC)
)

и будет вам счастье.


Во... в точку! Помогло!
Про ключевое слово SET в документации - весьма бедно.
И примеров нету. Добавьте хоть 1 пример в доку с GROUPING_SETS и SET.

Всё, что в доке есть....
Цитата:
В версии Oracle9i дополнительно могут использоваться псевдо-функции GROUPING_SETS и SET, которые при совместном использовании задают наборы для группировки. Псевдо-функция SET (равно как ROLLUP и CUBE) может использоваться для определения набора группируемых значений, каковые наборы, в свою очередь, передаются параметрами в GROUPING_SETS.


PS: у нас не банк, мы ядром-то пользуемся как платформой для своих разработок, а банковских операций и отчетов стандартных (чтобы глянуть как надо) - у нас нет.
Показать сообщения:   
Ответить на тему    Клуб специалистов ЦФТ-Банк (IBSO) -> Справочник PL/PLUS: Функции, примеры, приёмы Часовой пояс: GMT + 3
Страница 1 из 1

 
Перейти:  
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Рейтинг@Mail.ru