Member 12926744 Ответов: 1

Выберите время смены в зависимости от условия


I have three tables such as employees,Time slots and Scheduling . For example

Time Slots table : 
 id     time
  1     08:00:00    10:00:00
  2     10:00:00    12:00:00
  3     16:00:00    18:00:00
  4     08:00:00    16:00:00 
  5     14:00:00    18:00:00



Employee Table:

 EMP1
 EMP2
 EMP3
 EMP4


Scheduling table :

 EMP    TIMESLOTS ID 
 EMP1     1
 EMP2     2
 EMP3     4


I need to show the list of free employees in the time slots in a Gridview, ie since EMP3 is allocated in ( 08:00:00 16:00:00) ,then it should not be shown in any time slots between 08:00:00 16:00:00 ,but can be shown in any timeslot before 08:00:00 and after 16:00:00 ,similarly for all the scheduled Employees . If any of the employees is not scheduled on any time slots ,then that employee should be available in every time slots . ie ,EMP5 should be available in all time slots .


Что я уже пробовал:

My output should be like this  :

   EMPLOYEES          FREE TIME SLOTS
    EMP1                   10:00:00    12:00:00
    EMP1                   14:00:00    18:00:00
    EMP1                   16:00:00    18:00:00
    EMP2                   08:00:00    10:00:00
    EMP2                   16:00:00    18:00:00
    EMP2                   14:00:00    18:00:00
    EMP3                   16:00:00    18:00:00
    EMP4                   08:00:00    10:00:00
    EMP4                   10:00:00    12:00:00
    EMP4                   16:00:00    18:00:00
    EMP4                   08:00:00    16:00:00 
    EMP4                   14:00:00    18:00:00

Santosh kumar Pithani

мы не готовы делать вашу домашнюю работу;попробуйте поставить вопрос в "что я пробовал" :-)

Member 12926744

выберите e.emp, ts.*
от работника е перекрестное соединение
временных интервалов ТС левое соединение
планирование с
на s.emp = e.emp и s.timeslot_id = ts.timeslot_id
где S.Эми имеет значение null;

Именно это я и пытался сделать .Я застрял в фильтрации временных интервалов .

1 Ответов

Рейтинг:
0

#realJSOP

;WITH cte AS
(
    SELECT    a.name,
              CASE WHEN c.slotid IS null THEN 0 ELSE c.slotid END AS slotid
    FROM      #employees AS a 
    LEFT JOIN #schedules AS c ON a.name LIKE c.empname
)
SELECT     a.name,
           b.timestart,
           b.timeend
FROM       cte AS a 
INNER JOIN #timeslots AS b ON a.slotid <> b.id


Кстати, Ваш ожидаемый результат неверен. Существует пять временных интервалов, поэтому сотрудники 1, 2 и 3 будут иметь пять доступных временных интервалов, а не четыре, и emp4 будет иметь пять.

name	slotid	timestart		timeend
emp1	2	10:00:00.0000000	12:00:00.0000000
emp1	3	16:00:00.0000000	18:00:00.0000000
emp1	4	08:00:00.0000000	16:00:00.0000000
emp1	5	14:00:00.0000000	18:00:00.0000000
emp2	1	08:00:00.0000000	10:00:00.0000000
emp2	3	16:00:00.0000000	18:00:00.0000000
emp2	4	08:00:00.0000000	16:00:00.0000000
emp2	5	14:00:00.0000000	18:00:00.0000000
emp3	1	08:00:00.0000000	10:00:00.0000000
emp3	2	10:00:00.0000000	12:00:00.0000000
emp3	3	16:00:00.0000000	18:00:00.0000000
emp3	5	14:00:00.0000000	18:00:00.0000000
emp4	1	08:00:00.0000000	10:00:00.0000000
emp4	2	10:00:00.0000000	12:00:00.0000000
emp4	3	16:00:00.0000000	18:00:00.0000000
emp4	4	08:00:00.0000000	16:00:00.0000000
emp4	5	14:00:00.0000000	18:00:00.0000000


Member 12926744

Большое вам спасибо за ваш ответ . Как выбрать его на основе даты, т. е. предположим, что в таблице планирования есть поле даты, и мне нужно получить свободные временные интервалы на основе этой даты.

#realJSOP

Это совершенно другой вопрос. Я предложил решение этого вопроса.