Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с двойной группировкой / 10 сообщений из 10, страница 1 из 1
09.11.2020, 11:14
    #40016444
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
Всем добрый день! Помогите, пожалуйста, составить запрос.

Есть таблица (TBL) с колонками:
FIO;
DEPARTMENT;
CATEGORY;
SALARY;
SUMM_LINE

Я формирую временную таблицу (TBL_REPORT) на основе TBL, из которой построчно будут выводиться данные в отчет.
Требуемая сортировка: сортируем данные по DEPARTMENT, потом по CATEGORY.
Как составить запрос, чтобы он делал инсерт суммы по DEPARTMENT и по CATEGORY?
Т.е. желаемый результат такой должен быть как на картинке.
Заранее спасибо!
...
Рейтинг: 0 / 0
09.11.2020, 11:36
    #40016452
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
ak1906,

а на картинке ошибка. сделать можно так GROUPING
...
Рейтинг: 0 / 0
09.11.2020, 11:50
    #40016455
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
123йй,
за наводку спасибо, а ошибку что-то впритык не вижу(
...
Рейтинг: 0 / 0
09.11.2020, 12:00
    #40016459
123йй
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
ak1906,

убрать или добавить САТ*
...
Рейтинг: 0 / 0
09.11.2020, 13:06
    #40016482
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
123йй
ak1906,

а на картинке ошибка . сделать можно так GROUPING


если CATх одна строка то "всего по CATх" не выводим


.....
stax
...
Рейтинг: 0 / 0
09.11.2020, 13:56
    #40016497
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
ak1906,

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
SQL> ed
Wrote file afiedt.buf

  1  select
  2   ename
  3  ,decode(grouping_id(ename),0,deptno) deptno
  4  ,decode(grouping_id(ename),0,job) job
  5  ,decode(grouping_id(ename),0,sum(sal)) sal
  6  ,case when grouping_id(job)=1 then 'Dept '||to_char(deptno)||':'||to_char(sum(sal))
  7            when grouping_id(ename)=1 then 'Job '||job||':'||to_char(sum(sal))
  8            end  sum_line
  9  from emp
 10  group by grouping sets ((ename,deptno,job),(deptno,job),deptno)
 11* having grouping_id(ename,deptno,job)<>4 or count(*)>1
SQL> /

ENAME          DEPTNO JOB              SAL SUM_LINE
---------- ---------- --------- ---------- --------------------
MILLER             10 CLERK           1300
CLARK              10 MANAGER         2450
KING               10 PRESIDENT       5000
                                           Dept 10:8750
ADAMS              20 CLERK           1100
SMITH              20 CLERK            800
                                           Job CLERK:1900
FORD               20 ANALYST         3000
SCOTT              20 ANALYST         3000
                                           Job ANALYST:6000
JONES              20 MANAGER         2975
                                           Dept 20:10875
JAMES              30 CLERK            950
BLAKE              30 MANAGER         2850
WARD               30 SALESMAN        1250
ALLEN              30 SALESMAN        1600
MARTIN             30 SALESMAN        1250
TURNER             30 SALESMAN        1500
                                           Job SALESMAN:5600
                                           Dept 30:9400

20 rows selected.

SQL>



ename уникально, иначе empno/rowid и тд

.....
stax
...
Рейтинг: 0 / 0
09.11.2020, 14:12
    #40016505
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
Stax,
как раз то, что надо! Большое спасибо!
...
Рейтинг: 0 / 0
09.04.2021, 16:44
    #40061096
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
Stax,
немного запоздалый вопрос, но все же спрошу. Как переделать этот запрос так, чтобы строки с подитогами формировались над соответствующей группой, а не под? Я, конечно, выкрутился, всяческими доп. insert-aми, но это совершенно некрасиво выходит. А хотелось бы сразу в одном запросе все соединить.
Есть ли у Вас какой-нибудь общий шаблон, как можно масштабировать данный запрос, если, к примеру, будет не две колонки для группировки, а больше?
И не могли бы Вы пояснить, хотя бы кратко, что значат цифры в конце кода:
Код: plsql
1.
<>4 or count(*)>1
...
Рейтинг: 0 / 0
12.04.2021, 13:01
    #40061692
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
ak1906
Stax,
немного запоздалый вопрос, но все же спрошу. Как переделать этот запрос так, чтобы строки с подитогами формировались над соответствующей группой, а не под? Я, конечно, выкрутился, всяческими доп. insert-aми, но это совершенно некрасиво выходит. А хотелось бы сразу в одном запросе все соединить.
Есть ли у Вас какой-нибудь общий шаблон, как можно масштабировать данный запрос, если, к примеру, будет не две колонки для группировки, а больше?
И не могли бы Вы пояснить, хотя бы кратко, что значат цифры в конце кода:
Код: plsql
1.
<>4 or count(*)>1


запоздалый ответ

1)
добавте в вывод grouping_id(ename,deptno,job) gr, count(*) cc ...
закоментируйте having и все поймете

2) про сортировку
добавте order by и с его помощью добейтесь нужного порядка вывода
в order by используйте поля, grouping_id, GROUP_ID, GROUPING (ASC/DESC)
чтоб понятней было для "отладки" добавте поля/ф-ции в вывод селекта

......
stax
...
Рейтинг: 0 / 0
12.04.2021, 13:31
    #40061706
ak1906
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запрос с двойной группировкой
Stax, большое спасибо! Буду пробовать
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с двойной группировкой / 10 сообщений из 10, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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