Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь с sql запросом / 3 сообщений из 3, страница 1 из 1
20.05.2019, 05:37
    #39815176
LittleLady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь с sql запросом
Сижу ломаю голову над задачкой:
Есть 2 таблицы:
orders – инфа о заказах (order_id) в ателье головных уборов; сотруднике (employee_id), выполнившем заказ; дате оформления заказа (order_dt) и дате выполнения заказа (finish_dt);
schedule – таблица с информацией о графике работы сотрудников ателье (календарь со всеми датами для всех сотрудников). Содержит поля: сотрудник (employee_id), дата (date) и флаг выходного дня у сотрудника (holiday_flg, заполнение: Y – у сотрудника выходной день, N – рабочий день).
Написать запрос, который выводит результирующую таблицу с полями:
employee_id - сотрудник;
order_cnt - количество заказов каждого сотрудника, выполненных в срок не более 5 рабочих дней (рабочими считаются дни, помеченные флагом holiday_flg = ‘N’ в таблице schedule) ;
hundred_flg (Y/N) - флаг, превысило ли кол-во заказов, выполненных в срок не более 5 рабочих дней, у сотрудника 100шт.

По одному из общих условий задачи создавать новые объекты нельзя, следовательно вопрос как добавить к выборке новые поля, если они не фигурируют в искомых таблицах? И как прописать запрос на выборку в поля order_cnt и hundred_flg так, чтобы в итоге на всё получился один запрос?
Скрипты на создание таблиц и заполнение тестовыми данными:
Orders

Create table orders (
order_id int not null,
employee_id int not null,
order_dt datetime2 not null,
finish_dt datetime2 null
);
Go
Insert into orders('order_id', 'employee_id', 'order_dt', 'finish_dt') Values ('1','1','04-20-2018','04-25-2018' )
Go
Insert into orders('order_id', 'employee_id', 'order_dt', 'finish_dt') Values ('2','1','04-20-2018','04-30-2018' )
Go
Insert into orders('order_id', 'employee_id', 'order_dt', 'finish_dt') Values ('3','5','07-05-2018','08-30-2018' )
Go

schedule

Create table shedule (
employee_id int not null,
date datetime2 not null,
holiday_flg varchar(10) not null
);
Go
Insert into orders('employee_id', 'date', 'holiday_flg ') Values ('1','04-20-2018','Y' )
Go
Insert into orders('employee_id', 'date', 'holiday_flg ') Values ('2','04-20-2018','N')
Go
Insert into orders('employee_id', 'date', 'holiday_flg ') Values ('5','04-20-2018','Y' )
Go
СУБД MS SQL SERVER

Буду благодарна за помощь :) Несколько дней уже бьюсь над решением задачи
...
Рейтинг: 0 / 0
20.05.2019, 06:18
    #39815178
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь с sql запросом
Код: sql
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.
32.
33.
34.
35.
36.
37.
declare @orders table  (
order_id int not null, 
employee_id int not null, 
order_dt datetime not null, 
finish_dt datetime null
);

Insert into @orders(order_id, employee_id, order_dt, finish_dt) Values ('1','1','20180420','20180425' )
Insert into @orders(order_id, employee_id, order_dt, finish_dt) Values ('2','1','20180420','20180430' )
Insert into @orders(order_id, employee_id, order_dt, finish_dt) Values ('3','5','20180705','20180830' )

select * from @orders;

declare @shedule table  (
employee_id int not null, 
date datetime not null, 
holiday_flg varchar(10) not null
);
Insert into @shedule(employee_id, date, holiday_flg) Values ('1','20180420','Y' )
Insert into @shedule(employee_id, date, holiday_flg) Values ('1','20180421','N' )
Insert into @shedule(employee_id, date, holiday_flg) Values ('2','20180420','N')
Insert into @shedule(employee_id, date, holiday_flg) Values ('5','20180420','Y' )

select * from @shedule;
 
;
with o as ( select * from @orders )
   , s as ( select * from @shedule ) 
   -- дни исполнения заказов
   , os as ( select o.*, s.date, s.holiday_flg from  o inner join s on s.employee_id = o.employee_id and s.holiday_flg = 'N' and s.date between o.order_dt and o.finish_dt )
   -- кол-во дней исполнения заказов
   , odc as ( select employee_id, order_id, cntDays = count(*) from os group by employee_id, order_id )
   -- кол-во дней исполнения заказов <= 5
   , odc5 as ( select * from odc where cntDays <= 5 )
   -- трудоголики с днями исполнения заказов <= 5 + флаг 100
   , odc5f100 as ( select employee_id, f100 = case when count(*) > 100 then 'Y' else 'N' end  from odc5 group by employee_id)
 select * from odc5f100
...
Рейтинг: 0 / 0
20.05.2019, 23:07
    #39815545
LittleLady
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Нужна помощь с sql запросом
aleks222,

Спасибо огромное! :)
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Нужна помощь с sql запросом / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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