Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Dopy_2012.docx
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
124.26 Кб
Скачать
  1. Написать запрос, выдающий отчёт о суммарных выплатах сотрудникам, непосредственно

подчиняющихся заданному руководителю по идентификаторам должностей (поле Job_id).

Непосредственное подчинение предполагает подчинение на первом уровне. Номер

руководителя может встречаться в отчете лишь дважды.

with tbl_1 as

(select manager_id, job_id, count(*) cnt_1 ,sum(salary) sm

from employees

where manager_id is not null

group by rollup(manager_id, job_id)),

tbl_2 as

(select manager_id, count(*) cnt_2 from tbl_1 group by manager_id),

tbl_3 as

( select manager_id, job_id, cnt_1, sm,cnt_2,

rank() over (partition by manager_id order by job_id ) rnk

from tbl_1 join tbl_2 using(manager_id)

)

select case when rnk in (1, cnt_2) then manager_id end "Номерруководителя"

,job_id "Должность"

, cnt_1 "Кол-во сотрудников"

, sm "Выплаты"

, case when rnk = cnt_2 then 'Суммарная зарплата у руководителя ' || manager_id

else 'Зарплата сотрудников в должности ' || job_id

end "Видвыплаты"

from tbl_3

union all

select to_number(null), '', count(*), sum(salary), 'Общийитог' from employees

  1. Определить временной интервал между датами. Результат вывести в виде: ## лет ## мес ## дней, где # обозначает цифру.

SELECT

CASE

WHEN to_date('&&y','dd.mm.yy')>to_date('&&x', 'dd.mm.yy') THEN (

TRUNC(MONTHs_BETWEEN('&&y', to_date('&&x', 'dd.mm.yy'))/12)|| ' years '||

TRUNC(MOD(MONTHS_BETWEEN('&&y', to_date('&&x', 'dd.mm.yy')),12))|| ' months '||

CASE

WHEN substr(to_date('&&y','dd.mm.yy'),0,2)<substr(to_date('&&x', 'dd.mm.yy'),0,2)

THEN Substr(LAST_DAY('&&x'),0,2)-substr(to_date('&&x', 'dd.mm.yy'),0,2) + substr(to_date('&&y','dd.mm.yy'),0,2)

WHEN substr(to_date('&&y','dd.mm.yy'),0,2)>substr(to_date('&&x', 'dd.mm.yy'),0,2)

THEN substr(to_date('&&y','dd.mm.yy'),0,2)-substr(to_date('&&x', 'dd.mm.yy'),0,2)

ELSE 0

END || ' days' )

WHEN to_date('&&y','dd.mm.yy')<to_date('&&x', 'dd.mm.yy') THEN (

TRUNC(MONTHs_BETWEEN(to_date('&&x', 'dd.mm.yy'),'&&y')/12)|| ' years '||

TRUNC(MOD(MONTHS_BETWEEN(to_date('&&x', 'dd.mm.yy'),'&&y' ),12))|| ' months '||

CASE

WHEN substr(to_date('&&y','dd.mm.yy'),0,2)<substr(to_date('&&x', 'dd.mm.yy'),0,2)

THEN substr(to_date('&&x', 'dd.mm.yy'),0,2)-substr(to_date('&&y','dd.mm.yy'),0,2)

WHEN substr(to_date('&&y','dd.mm.yy'),0,2)>substr(to_date('&&x', 'dd.mm.yy'),0,2)

THEN substr(LAST_DAY('&&y'),0,2)-substr(to_date('&&y','dd.mm.yy'),0,2)+ substr(to_date('&&x', 'dd.mm.yy'),0,2)

ELSE 0

END || ' days' )

ELSE '0'

END "RESULT"

FROM dual;

  1. Вывести фамилии всех сотрудников через запятую столько раз сколько символов в их фамилии

SELECT last_name, LPAD(last_name ,length(last_name)*length(last_name)+length(last_name)-1,last_name || ',')

FROMEMPLOYEES

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]