powered by simpleCommunicator - 2.0.52     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Групповые функции Oracle
5 сообщений из 5, страница 1 из 1
Групповые функции Oracle
    #39937223
Natali_ya20
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Помогите, пожалуйста, с задачкой.
Вообщем-то, я ее решила, но не так как требует условие(пробовала решить с использованием 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
Групповые функции Oracle
    #39937250
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Групповые функции Oracle
    #39937264
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Групповые функции Oracle
    #39937329
PuM256
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сорри, одно и то же дважны скопировал. :)

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


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