Guest User

Untitled

a guest
Mar 21st, 2018
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.05 KB | None | 0 0
  1. create table Tab (Группа varchar2(100), Участник varchar2(100), Заработок number, Работ number);
  2.  
  3. delete Tab;
  4. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 1',200,4);
  5. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 2',200,6);
  6. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 3',400,1);
  7. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 1','Участник 4',400,5);
  8. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 2','Участник 5',300,1);
  9. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 2','Участник 6',400,3);
  10. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 2','Участник 7',400,6);
  11. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 3','Участник 6',300,2);
  12. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 3','Участник 8',300,4);
  13. insert into Tab (Группа, Участник, Заработок, Работ) values ('Группа 3','Участник 9',300,6);
  14.  
  15. commit;
  16.  
  17. select
  18. Группа5 Группа,
  19. Участник2 Участник,
  20. Работ2 Работы,
  21. (case when grp1 = 1 and grp2 = 1 then sum(Заработок2+Заработок3) over (order by Группа2, grp1)
  22. when grp1 = 1 and grp2 = 0 then sum(Заработок2+Заработок3) over (partition by Группа2 order by Группа2, grp1) else Заработок2+Заработок3 end) Суммы
  23. from (
  24. select
  25. Группа1 Группа2,
  26. (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,
  27. Участник1 Участник2,
  28. Работ1 Работ2,
  29. (case when grp1 = 0 and avg(Работ1) over (partition by Группа1, grp1 order by grp1)>=4 then (Заработок1*0.2) else 0 end) Заработок2,
  30. (case when grp1 = 0 and max(Работ1) over (partition by Группа1, grp1 order by grp1)=Работ1 then (Заработок1*0.1) else 0 end) Заработок3,
  31. grp1,
  32. grp2
  33. from (
  34. select
  35. Группа Группа1,
  36. Участник Участник1,
  37. sum(Работ) Работ1,
  38. sum(Заработок) Заработок1,
  39. grouping(Участник) grp1,
  40. grouping(Группа) grp2
  41. from Tab
  42. group by grouping sets ((null), (Группа), (Участник), (Группа, Участник))
  43. )
  44. order by Группа1, Участник1
  45. )
  46. where (Группа5 is not null or Участник2 is null)
  47. order by grp2 desc, Группа2 asc, grp1 desc, Участник2 asc
Add Comment
Please, Sign In to add comment