SQL как хранить у сотрудников праздничные запросы и оставшиеся дни

1

У меня есть следующее требование (SQL SERVER):

Мне нужно сохранить все запросы на отпуск сотрудников (только каникулы) в таблице

Также мне нужно знать, сколько осталось дней (vacations) в период (период вступления в должность сотрудника)

Сотрудник может запросить заблаговременные дни следующего периода, которые будут использоваться в фактический период.

Здесь схематично, как она должна работать:

Изображение 174551

Каждый период каникул - от даты присоединения к сотрудникам плюс один год.

  1. В первый период (когда сотрудник присоединяется к компании) он по умолчанию получает 4 отпуска.
  2. Затем каждый период работник получает 2 дня с лимитом в 18 дней.

Если мы увидим Период 2011 -2 012:

  1. У сотрудника есть 5 дней отпуска для использования
  2. Потому что это первый год, нет предыдущих периодов неиспользованных дней.
  3. У него было 4 отпуска, поэтому он использовал 4 дня.
  4. Остальные дни этого периода составляли 1 день, которые накапливаются на следующий период.

Если мы увидим Период 2012 -2 013:

  1. Сотрудник теперь имеет 7 дней отпуска для использования.
  2. У него есть 1 день, не использованный с предыдущего периода.
  3. У него было 10 дней отпуска, поэтому он использовал 10 дней.
  4. Поскольку у него всего 7 дней с фактического периода плюс 1 неиспользованный день с предыдущего, у него всего 8 дней. Но компания позволила ему занять несколько дней "заранее" со следующего периода. В этом случае он просит за 2 дня.
  5. Остальные дни этого периода составляли 0 дней.

Теперь, если мы увидим Период 2013 -2 014:

  1. Теперь у сотрудника есть 9 дней отпуска.
  2. Он запросил -2 дней.
  3. У него было 6 дней отпуска, поэтому он использовал 6 дней.
  4. Поскольку у него есть 9 дней с фактического периода минус 2 дня, запрошенных заранее от предыдущего, у него всего 7 дней.
  5. Остальные дни, оставшиеся от периода, составляют 1 день.

Мои фактические таблицы employee_holiday и employee_holiday_item:

  • employee_holiday таблице employee_holiday будут храниться все запросы на отпуск
  • employee_holiday_item таблице employee_holiday_item будут храниться непрерывные дни в случае, если сотрудник в том же запросе на отпуск запросил несрочные дни.

employee_holiday будет выполнять все праздничные запросы

Изображение 174551

Я хотел бы знать, есть ли у кого-нибудь что-то подобное, какие другие таблицы предлагаются для достижения того, что мне нужно.

Я не думаю, что было бы необходимо создать таблицу employee_holiday_period за каждый период, потому что вся информация из запросов на отпуск уже находится в таблице employee_holiday и я уже знаю из моей таблицы employee дату вступления.

Надеюсь, кто-то может мне помочь или направить на это. Ценить это.

  • 0
    Это MySQL или SQL-сервер?
  • 0
    SQL Server, только что обновил вопрос.
Показать ещё 1 комментарий
Теги:
sql-server
sql-server-2008

2 ответа

0

Для меня таблица employee_holiday, похоже, больше относится к журнальной таблице. Если вы не возражаете, я буду использовать разные имена, которые, я думаю, могут быть применимы не только к отпускам.

У вас будет таблица с названием employee_ leaveTime, которая сохранит тип отпуска и количество оставшихся дней. Затем в employee_leaveTime_log (который вы назвали employee_holiday) вы можете зарегистрировать запрос сотрудника на отпуск (будь то отпуск, больной и т.д.), А также любые другие данные, которые вы хотите отслеживать. Затем вы вычитаете из оставшихся дней для этого конкретного типа отпуска в другой таблице. С этим вы можете лучше добавить время.

Я думаю, что с этим вы могли бы использовать его больше, чем просто отпуск

  • 0
    Но количество оставшихся дней связано с периодом (дата присоединения + 1 год).
  • 0
    К дате присоединения, что вы имеете в виду?
Показать ещё 2 комментария
0

По моему пониманию я создал ниже сценарий. Часть CTE рассчитает общий отпуск сотрудника на основании его услуги в компании. "LeaveTaken" вычисляет все листья, взятые сотрудником. В конце концов, я принял разницу между общим отпуском работника и его отъездом. Если это происходит как отрицательное значение, что означает, что работник сделал предварительный отпуск, значение будет положительным.

Пропустите идентификатор сотрудника как @UserID. Возможно, вам придется внести несколько изменений в код, поэтому перед выполнением кода выполните код.

DECLARE @NoYearsOfService INT = 15; --DATEDIFF(Years,DateOfJoining,CurrentYear)
DECLARE @Leavetaken INT;

SELECT @Leavetaken = SUM(Leaves)
    FROM (
                SELECT SUM(DATEDIFF(DAYS,StartDate,EndDate)) L
                FROM employee_holiday
                WHERE UserID = @UserID

                UNION

                SELECT COUNT(*)
                FROM employee_holiday_item
         ) temp

;WITH CTE AS
(
    SELECT 4 Days,
           4 TotalLeaves,
           1 Years

    UNION ALL

    SELECT  Days + 2,
            CASE WHEN Days < 18 
                THEN TotalLeaves + Days + 2
                ELSE TotalLeaves + 18 END,
           Years + 1
    FROM CTE 
    WHERE Years < @NoYearsOfService
)

SELECT TotalLeaves - @Leavetaken
FROM CTE
WHERE Years = @NoYearsOfService

Ещё вопросы

Сообщество Overcoder
Наверх
Меню