Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Групповые функции Oracle / 5 сообщений из 5, страница 1 из 1
13.03.2020, 17:19
    #39937223
Natali_ya20
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Групповые функции Oracle
Помогите, пожалуйста, с задачкой.
Вообщем-то, я ее решила, но не так как требует условие(пробовала решить с использованием rollap,cube,grouping sets,но все равно не получается..)
Задача:
Напишите одним запросом без использования операторов Union, который для «tab1» посчитает суммы по полям «a1» и «a2», в группировке по полям «TXT», «CODE», при этом для поля «TXT» требуется рассчитать только итоговые значения суммы «a1», а для поля «CODE» требуется рассчитать только итоговые значения суммы «a2», общий итог по группам не требуется.
Результат должен быть похож на:
TEXT SUM_A1 SUM_A2
----------------- ---------- ----------
Txt1 – 0 2 1
Txt2 – 0 4 4
Txt1 – 1 1 2
Txt2 – 1 5 3
Txt1 – 2 3 7
Txt2 – 2 6 1
Итог code: 0 0 5
Итог code: 1 0 5
Итог code: 2 0 8
Итог txt: Txt1 6 0
Итог txt: Txt2 15 0


TABLE tab1
Name Type
------ ------------
ID NUMBER
TXT CHAR(3)
CODE NUMBER(3)
A1 NUMBER
A2 NUMBER


Мое решение с использованием union:
SELECT TXT,CODE, SUM(A1) as sum_a1,SUM(A2) as sum_a2
FROM FNI_TAB1
GROUP BY TXT, CODE
union ALL
SELECT TXT,NULL,SUM(A1) as sum_a1,NULL
FROM FNI_TAB1
GROUP BY TXT
union ALL
SELECT NULL,CODE,NULL,SUM(A2) as sum_a2
FROM FNI_TAB1
GROUP BY CODE;

Заранее спасибо.
...
Рейтинг: 0 / 0
13.03.2020, 18:02
    #39937250
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Групповые функции Oracle
Natali_ya20,

Код: 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.
SQL> With t As
  2  (
  3    Select 1 Id, 'Txt1' TXT, 0 Code, 10 A1, 20 A2 From dual
  4    Union All Select 2, 'Txt1', 1, 20, 30 From dual
  5    Union All Select 3, 'Txt2', 2, 30, 40 From dual
  6    Union All Select 3, 'Txt2', 0, 40, 60 From dual
  7  )
  8  Select
  9    txt, Code,
 10    Decode(Grouping_id, 2, Null, SUM_A1) SUM_A1,
 11    Decode(Grouping_id, 1, Null, SUM_A2) SUM_A2
 12  From (
 13    Select txt, Code, Sum(a1) sum_a1, Sum(a2) sum_a2, grouping_id(txt, Code) grouping_id
 14    From t
 15  	Group By Grouping Sets((txt, Code), txt, Code) Order By 5, 1, 2);

TXT                    CODE SUM_A1                                   SUM_A2
---------------- ---------- ---------------------------------------- ----------------------------------------
Txt1                      0 10                                       20
Txt1                      1 20                                       30
Txt2                      0 40                                       60
Txt2                      2 30                                       40
Txt1                        30                                       
Txt2                        70                                       
                          0                                          80
                          1                                          30
                          2                                          40

9 rows selected
...
Рейтинг: 0 / 0
13.03.2020, 18:54
    #39937264
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Групповые функции Oracle
Natali_ya20,

Или если хочется странного, можно так:

Код: 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.
SQL> With t As
  2  (
  3    Select 1 Id, 'Txt1' TXT, 0 Code, 10 A1, 20 A2 From dual
  4    Union All Select 2, 'Txt1', 1, 20, 30 From dual
  5    Union All Select 3, 'Txt2', 2, 30, 40 From dual
  6    Union All Select 3, 'Txt2', 0, 40, 60 From dual
  7  )
  8  Select
  9    txt, Code,
 10    Decode(Grouping_id, 2, Null, SUM_A1) SUM_A1,
 11    Decode(Grouping_id, 1, Null, SUM_A2) SUM_A2
 12  From (
 13    Select txt, Code, Sum(a1) sum_a1, Sum(a2) sum_a2, grouping_id(txt, Code) grouping_id
 14    From t
 15  	Group By Grouping Sets((txt, Code), txt, Code) Order By 5, 1, 2);

TXT                    CODE SUM_A1                                   SUM_A2
---------------- ---------- ---------------------------------------- ----------------------------------------
Txt1                      0 10                                       20
Txt1                      1 20                                       30
Txt2                      0 40                                       60
Txt2                      2 30                                       40
Txt1                        30                                       
Txt2                        70                                       
                          0                                          80
                          1                                          30
                          2                                          40

9 rows selected
...
Рейтинг: 0 / 0
13.03.2020, 23:07
    #39937329
PuM256
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Групповые функции Oracle
Сорри, одно и то же дважны скопировал. :)

Код: 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.
SQL> With t As
  2  (
  3  	Select 1 Id, 'Txt1' TXT, 0 Code, 10 A1, 20 A2 From dual
  4    Union All Select 2, 'Txt1', 1, 20, 30 From dual
  5    Union All Select 3, 'Txt2', 2, 30, 40 From dual
  6    Union All Select 3, 'Txt2', 0, 40, 60 From dual
  7  )
  8  Select txt, Code, sum_a1, sum_a2 From t
  9  Model
 10  Dimension By (txt, Code)
 11  Measures (a1, a2, 0 sum_a1, 0 sum_a2)
 12  Rules Upsert All (
 13  	sum_a1[Any, Any] = Sum(a1)[Cv(txt), Cv(Code)],
 14  	sum_a2[Any, Any] = Sum(a2)[Cv(txt), Cv(Code)],
 15    sum_a1[txt, Null] = Sum(a1)[Cv(txt), Any],
 16    sum_a2[Null, Code] = Sum(a2)[Any, Cv(Code)]
 17  );

TXT                    CODE     SUM_A1     SUM_A2
---------------- ---------- ---------- ----------
Txt1                      0         10         20
Txt1                      1         20         30
Txt2                      2         30         40
Txt2                      0         40         60
Txt1                                30 
Txt2                                70 
                          0                    80
                          1                    30
                          2                    40

9 rows selected
...
Рейтинг: 0 / 0
23.03.2020, 16:23
    #39940298
Natali_ya20
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Групповые функции Oracle
PuM256,большое спасибо!Разобралась:)
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Групповые функции Oracle / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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