Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 сложные итоги  [new]
Maks_Kh
Guest
нашел поиском много похожих тем но что то не выходит у меня "каменный цветок" :)
проблема следующая...есть три таблички
1- в ней храняться данные которые надо просуммировать
(select 11 id_doctype , 'aaa' ost, 5 kol_ost, 'bbb' pol, 3 kol_pol from dual
union all
select 12 id_doctype , 'ccc' ost, 2 kol_ost, 'ddd' pol, 4 kol_pol from dual
union all
select 13 id_doctype , 'eee' ost, 5 kol_ost, 'fff' pol, 6 kol_pol from dual
union all
select 14 id_doctype , 'ggg' ost, 2 kol_ost, 'jjj' pol, 2 kol_pol from dual
union all
select 15 id_doctype , 'hhh' ost, 4 kol_ost, 'ggg' pol, 1 kol_pol from dual
union all
select 16 id_doctype , 'www' ost, 1 kol_ost, 'eee' pol, 1 kol_pol from dual) a
2-я показывает иерархию
select 11 id_doctype, 22 id_blank, 1 id_parent  from dual 
union all
select 12 id_doctype, 23 id_blank, 1 id_parent from dual
union all
select 13 id_doctype, 24 id_blank, 1 id_parent from dual
union all
select 14 id_doctype, 25 id_blank, 2 id_parent from dual
union all
select 15 id_doctype, 26 id_blank, 2 id_parent from dual
union all
select 16 id_doctype, 27 id_blank, 2 id_parent from dual
union all
select 1 id_doctype, 28 id_blank, null id_parent from dual
union all
select 2 id_doctype, 29 id_blank , 3 id_parent from dual
union all
select 3 id_doctype, 30 id_blank , null id_parent from dual
в 3- храняться названия
select 22 id_blank , 'type1' name_b from dual 
union all
select 23 id_blank , 'type2' name_b from dual 
union all
select 24 id_blank , 'type3' name_b from dual 
union all
select 25 id_blank , 'type4' name_b from dual 
union all
select 26 id_blank , 'type5' name_b from dual 
union all
select 27 id_blank , 'type6' name_b from dual 
union all
select 28 id_blank , 'TYPE I' name_b from dual 
union all
select 29 id_blank , 'TYPE II.1' name_b from dual 
union all
select 30 id_blank , 'TYPE II' name_b from dual 
хотелось бы получить результат типа такого
name        |ost|kol_ost|pol|kol_pol |
------------------------------------------------
TYPE I   
type1        |aaa|   5     |bbb|  3       |     
type2        |ccc|   2     | ddd|  4      |
type3        |eee|   5     |fff  |   6      |
ИТОГО по
TYPE I                  12              13
------------------------------------------------
TYPE II
TYPE II.1
type4        |ggg|   2     | jjj |   2      |
type5        |hhh|   4     |ggg|  1       |
type6        |vvv|   1     |eee|  1       |
ИТОГО по
TYPE II.1               7               4
------------------------------------------------
ИТОГО по
TYPE II                  7               4
------------------------------------------------
ВСЕГО                 19              21
Понимаю что тут надо использовать rollup, но тут еще и иерархия :( по отдельности все вроде ясно..а как вот вместе скрутить чтоб получить вот такой результат ?
13 фев 07, 19:28    [3780478]     Ответить | Цитировать Сообщить модератору
 Re: сложные итоги  [new]
Maks_Kh
Guest
версия Oracle
9.2.0.4.0
13 фев 07, 19:47    [3780566]     Ответить | Цитировать Сообщить модератору
 Re: сложные итоги  [new]
Maks_Kh
Guest
((
14 фев 07, 10:01    [3781986]     Ответить | Цитировать Сообщить модератору
 Re: сложные итоги  [new]
SeaGate
Member

Откуда: Новосибирск
Сообщений: 1635
Maks_Kh
версия Oracle
9.2.0.4.0

Порешал немного, но до конца не осилил сразу и ретировался на обед, дошел до вот такого, может чем поможет :)
SQL> --код таблиц вырезан, чтобы не флудить
 49  select lpad(' ',(level-1)*5)||t3.name_b name_b,
 50         t1.ost, t1.kol_ost, t1.pol, t1.kol_pol,
 51         (select /*+ no_merge*/sum(t4.kol_ost)
 52            from b1 t4, b2 t5
 53           where t4.id_doctype(+)=t5.id_doctype
 54           start with t5.id_parent = t2.id_doctype
 55           connect by prior t5.id_doctype=t5.id_parent
 56          ) total_kol_ost,
 57          (select /*+ no_merge*/sum(t4.kol_pol)
 58            from b1 t4, b2 t5
 59           where t4.id_doctype(+)=t5.id_doctype
 60           start with t5.id_parent = t2.id_doctype
 61           connect by prior t5.id_doctype=t5.id_parent
 62          ) total_kol_pol
 63    from b1 t1, b2 t2, b3 t3
 64   where t1.id_doctype(+)=t2.id_doctype
 65     and t2.id_blank=t3.id_blank
 66   start with t2.id_parent is null
 67   connect by prior t2.id_doctype=t2.id_parent
 68  /

NAME_B               OST    KOL_OST POL    KOL_POL TOTAL_KOL_OST TOTAL_KOL_POL
-------------------- --- ---------- --- ---------- ------------- -------------
TYPE II                                                        7             4
     TYPE II.1                                                 7             4
          type4      ggg          2 jjj          2               
          type5      hhh          4 ggg          1               
          type6      www          1 eee          1               
TYPE I                                                        12            13
     type1           aaa          5 bbb          3               
     type2           ccc          2 ddd          4               
     type3           eee          5 fff          6               

9 rows selected

SQL> 
14 фев 07, 10:06    [3782012]     Ответить | Цитировать Сообщить модератору
 Re: сложные итоги  [new]
Maks_Kh
Guest
To SeaGate:
спасибо большое!
то что нужно.
14 фев 07, 10:43    [3782335]     Ответить | Цитировать Сообщить модератору
 Re: сложные итоги  [new]
Maks_Kh
Guest
вот так получилось очень красиво:)
select * 
from 
( select id_blanktype, name_b
       ,ost1,decode (ost_kol1,null,total_kol_ost,ost_kol1) ost_kol1 
       ,pol2,decode (pol_kol2,null,total_kol_pol,pol_kol2) pol_kol2
       ,zad3,decode (zad_kol3,null,total_kol_zad,zad_kol3) zad_kol3
       ,isp4,decode (isp_kol4,null,total_kol_isp,isp_kol4) isp_kol4
       
from 
( select t1.id_blanktype, lpad(' ',(level-1)*3)||t3.fullname name_b, t1.ost1, t1.ost_kol1, t1.pol2, t1.pol_kol2
         , t1.zad3 , t1.zad_kol3, t1.isp4, t1.isp_kol4,
          (select /*+ no_merge*/sum(t4.ost_kol1) 
             from asta.tmp_rep_blank_akt_2 t4, asta.doctype t5
            where t4.id_doctype(+)=t5.id_doctype  
            start with t5.id_parent = t2.id_doctype         
            connect by prior t5.id_doctype=t5.id_parent
           ) total_kol_ost,
           ------------------------------------------------
           (select /*+ no_merge*/sum(t4.pol_kol2)
             from asta.tmp_rep_blank_akt_2 t4, asta.doctype t5
            where t4.id_doctype(+)=t5.id_doctype
            start with t5.id_parent = t2.id_doctype
            connect by prior t5.id_doctype=t5.id_parent
           ) total_kol_pol,
           ------------------------------------------------           
            (select /*+ no_merge*/sum(t4.zad_kol3)
             from asta.tmp_rep_blank_akt_2 t4, asta.doctype t5
            where t4.id_doctype(+)=t5.id_doctype
            start with t5.id_parent = t2.id_doctype
            connect by prior t5.id_doctype=t5.id_parent
           ) total_kol_zad,
           ------------------------------------------------           
            (select /*+ no_merge*/sum(t4.isp_kol4)
             from asta.tmp_rep_blank_akt_2 t4, asta.doctype t5
            where t4.id_doctype(+)=t5.id_doctype
            start with t5.id_parent = t2.id_doctype
            connect by prior t5.id_doctype=t5.id_parent
           ) total_kol_isp
           ------------------------------------------------           
     from asta.tmp_rep_blank_akt_2 t1, asta.doctype t2, asta.doc_blanktype t3
    where t1.id_doctype(+)=t2.id_doctype    
      and t2.id_blanktype=t3.id_docblank_type
    start with t2.id_parent is null 
    connect by prior t2.id_doctype=t2.id_parent))
where 
id_blanktype<>0
но оказалось что еще и надо выводить Итого по типу, т.е. есть несколько записей в первой таблице одного типа, и другого типа, и эти оба типа относятся к одному родственнику....в случае такого запроса будет итог только по родителю...а хотелось бы еще и по каждому ребенку...
кто нибудь поможет ?
14 фев 07, 15:19    [3785009]     Ответить | Цитировать Сообщить модератору
 Re: сложные итоги  [new]
Maks_Kh
Guest
:( что ж ни у кого нет никаких идей ?
:(
14 фев 07, 16:20    [3785678]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить