Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- create table Tab (Группа varchar2(100), Участник varchar2(100), Заработок number, Работ number);
- delete Tab;
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 1',200,4);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 2',200,6);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 3',400,1);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 4',400,5);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 2','Участник 5',300,1);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 2','Участник 6',400,3);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 2','Участник 7',400,6);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 3','Участник 6',300,2);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 3','Участник 8',300,4);
- insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 3','Участник 9',300,6);
- commit;
- select
- Группа5 Группа,
- Участник2 Участник,
- Работ2 Работы,
- (case when grp1 = 1 and grp2 = 1 then sum(Заработок2+Заработок3) over (order by Группа2, grp1)
- when grp1 = 1 and grp2 = 0 then sum(Заработок2+Заработок3) over (partition by Группа2 order by Группа2, grp1) else Заработок2+Заработок3 end) Суммы
- from (
- select
- Группа1 Группа2,
- (case when grp1 = 0 and grp2 = 1 and max(Работ1) over (partition by Группа1, grp1 order by grp1)=Работ1 then (select Группа from Tab where Участник = Участник1) else Группа1 end) Группа5,
- Участник1 Участник2,
- Работ1 Работ2,
- (case when grp1 = 0 and avg(Работ1) over (partition by Группа1, grp1 order by grp1)>=4 then (Заработок1*0.2) else 0 end) Заработок2,
- (case when grp1 = 0 and max(Работ1) over (partition by Группа1, grp1 order by grp1)=Работ1 then (Заработок1*0.1) else 0 end) Заработок3,
- grp1,
- grp2
- from (
- select
- Группа Группа1,
- Участник Участник1,
- sum(Работ) Работ1,
- sum(Заработок) Заработок1,
- grouping(Участник) grp1,
- grouping(Группа) grp2
- from Tab
- group by grouping sets ((null), (Группа), (Участник), (Группа, Участник))
- )
- order by Группа1, Участник1
- )
- where (Группа5 is not null or Участник2 is null)
- order by grp2 desc, Группа2 asc, grp1 desc, Участник2 asc
Add Comment
Please, Sign In to add comment