powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с двойной группировкой
10 сообщений из 10, страница 1 из 1
Запрос с двойной группировкой
    #40016444
ak1906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем добрый день! Помогите, пожалуйста, составить запрос.

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

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

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

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

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


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


.....
stax
...
Рейтинг: 0 / 0
Запрос с двойной группировкой
    #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
Запрос с двойной группировкой
    #40016505
ak1906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
как раз то, что надо! Большое спасибо!
...
Рейтинг: 0 / 0
Запрос с двойной группировкой
    #40061096
ak1906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax,
немного запоздалый вопрос, но все же спрошу. Как переделать этот запрос так, чтобы строки с подитогами формировались над соответствующей группой, а не под? Я, конечно, выкрутился, всяческими доп. insert-aми, но это совершенно некрасиво выходит. А хотелось бы сразу в одном запросе все соединить.
Есть ли у Вас какой-нибудь общий шаблон, как можно масштабировать данный запрос, если, к примеру, будет не две колонки для группировки, а больше?
И не могли бы Вы пояснить, хотя бы кратко, что значат цифры в конце кода:
Код: plsql
1.
<>4 or count(*)>1
...
Рейтинг: 0 / 0
Запрос с двойной группировкой
    #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
Запрос с двойной группировкой
    #40061706
ak1906
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax, большое спасибо! Буду пробовать
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Запрос с двойной группировкой
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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