Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 никак не соображу - rollup - создание отчета  [new]
olginger
Member

Откуда:
Сообщений: 19
Утро доброе!

Прошу натолкнуть на мысль ибо мне на ум нужное решение не приходит.

Задача:

Создать запрос для получения сводной информации об отделах, должностях и сотрудниках, работающих на должностях SA_REP и ST_MAN в 30 и 80 отделах. Результат представить в виде (см.приложение).

Процент на премию задается как константа (вводится с клавиатуры). Значение в строке Всего в последнем столбце равно значению в строке ИТОГО, увеличенному на заданный процент на премию. Задачу решить без использования оператора UNION.

Собственно, что у меня есть:

SELECT coalesce(to_char(job_id), 'ИТОГО') job_id, manager_id, department_id, sum(salary)
FROM employees
WHERE department_id IN (30,80)
AND job_id          IN ('SA_REP','ST_MAN')
group by rollup(job_id, manager_id, department_id)


Внимание, вопрос! Как сделать последние две строки в отчете без юнион?

Спасибо за помощь :)

К сообщению приложен файл. Размер - 66Kb
22 янв 14, 11:03    [15450916]     Ответить | Цитировать Сообщить модератору
 Re: никак не соображу - rollup - создание отчета  [new]
-2-
Member

Откуда:
Сообщений: 15330
olginger
Задачу решить без использования оператора UNION.
outer join, model

olginger
to_char(job_id)
что-то ты не договариваешь на картинке
22 янв 14, 11:26    [15451084]     Ответить | Цитировать Сообщить модератору
 Re: никак не соображу - rollup - создание отчета  [new]
-2-
Member

Откуда:
Сообщений: 15330
или так:
with t(x, y) as (
   select 'a', 100 from dual union all
   select 'a',  10 from dual union all
   select 'b', 200 from dual union all
   select 'b',  20 from dual union all
   select 'c', 300 from dual 
)
select
   grouping(x) gx,
   grouping(y) gy,
   grouping(1) g1,
   grouping(2) g2,
   x, sum(y) y
from t
group by grouping sets((x, y), x, (), 1, 2);

        GX         GY         G1         G2 X                             Y
---------- ---------- ---------- ---------- -------------------- ----------
         0          0          1          1 a                            10 
         0          0          1          1 a                           100 
         0          1          1          1 a                           110 
         0          0          1          1 b                            20 
         0          0          1          1 b                           200 
         0          1          1          1 b                           220 
         0          0          1          1 c                           300 
         0          1          1          1 c                           300 
         1          1          1          1                             630 
         1          1          0          1                             630 
         1          1          1          0                             630 

 11 rows selected 
22 янв 14, 12:03    [15451409]     Ответить | Цитировать Сообщить модератору
 Re: никак не соображу - rollup - создание отчета  [new]
-2-
Member

Откуда:
Сообщений: 15330
или так:
with t(x, y) as (
   select 'a', 100 from dual union all
   select 'a',  10 from dual union all
   select 'b', 200 from dual union all
   select 'b',  20 from dual union all
   select 'c', 300 from dual 
)
select
   grouping(x) gx,
   grouping(y) gy,
   grouping(1) g1,
   grouping(2) g2,
   x, sum(y) y
from t
group by grouping sets((x, y), x, (), 1, 2);

        GX         GY         G1         G2 X                             Y
---------- ---------- ---------- ---------- -------------------- ----------
         0          0          1          1 a                            10 
         0          0          1          1 a                           100 
         0          1          1          1 a                           110 
         0          0          1          1 b                            20 
         0          0          1          1 b                           200 
         0          1          1          1 b                           220 
         0          0          1          1 c                           300 
         0          1          1          1 c                           300 
         1          1          1          1                             630 
         1          1          0          1                             630 
         1          1          1          0                             630 

 11 rows selected 
22 янв 14, 12:03    [15451414]     Ответить | Цитировать Сообщить модератору
 Re: никак не соображу - rollup - создание отчета  [new]
из далека
Guest
-2-
   grouping(1) g1,
   grouping(2) g2,

Занятно. Всегда для цели приклеивания к отчёту "левых" итогов использовал model.
22 янв 14, 12:17    [15451521]     Ответить | Цитировать Сообщить модератору
 Re: никак не соображу - rollup - создание отчета  [new]
para-
Member

Откуда:
Сообщений: 29
хмм.

этот запрос

with t(x, y) as (
   select 'a', 100 from dual union all
   select 'a',  10 from dual union all
   select 'b', 200 from dual union all
   select 'b',  20 from dual union all
   select 'c', 300 from dual 
)
select
   grouping(x) gx,
   grouping(y) gy,
   grouping(1) g1,
   grouping(2) g2,
   x, sum(y) y
from t
group by grouping sets((x, y), x, (), 1, 2);


на версиях от

SQL> select * from v$version;

BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
PL/SQL Release 11.2.0.1.0 - Production
CORE    11.2.0.1.0      Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production


до

SQL> select * from v$version;

BANNER                                                                               CON_ID
-------------------------------------------------------------------------------- ----------
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production              0
PL/SQL Release 12.1.0.1.0 - Production                                                    0
CORE    12.1.0.1.0      Production                                                                0
TNS for Linux: Version 12.1.0.1.0 - Production                                            0
NLSRTL Version 12.1.0.1.0 - Production                                                    0


получаем
   select 'a', 100 from dual union all
                                *
ERROR at line 2:
ORA-00904: "SYS_TBL_$1$"."Y": invalid identifier
22 янв 14, 15:34    [15452662]     Ответить | Цитировать Сообщить модератору
 Re: никак не соображу - rollup - создание отчета  [new]
K790
Member

Откуда:
Сообщений: 634
para-,

select 'a' x, 100 y from dual union all
22 янв 14, 15:38    [15452682]     Ответить | Цитировать Сообщить модератору
 Re: никак не соображу - rollup - создание отчета  [new]
para-
Member

Откуда:
Сообщений: 29
K790
para-,

select 'a' x, 100 y from dual union all



эт понядно. вопрос именно про оригинальный вариант со списком колонок в with.
22 янв 14, 15:43    [15452716]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить