我有以下要求( SQL SERVER ):
我需要将所有员工休假请求(仅限假期)存储在表格中
此外,我需要知道期间(员工加入日期年度)剩余多少天(
vacations
)员工可以在下一期间提前请求在实际期间内使用。
以下是它应该如何运作的示意图:
每个休假期均来自员工加入日期加一年。
如果我们看到期间 2011-2012 :
如果我们看到期间 2012-2013 :
现在,如果我们看到期间 2013-2014 :
我的实际employee_holiday
和employee_holiday_item
表格是:
employee_holiday
表将保留所有假期请求employee_holiday_item
表将存储非连续的天数,以防员工在同一个度假请求中请求非连续的几天。employee_holiday将保留所有假期请求
我想知道是否有人有类似这样的内容,为了达到我的需要,建议使用其他表格。
我认为没有必要为每个时段创建一个employee_holiday_period
表,因为来自休假请求的所有信息都已经在employee_holiday
表中,我已经知道了employee
}表连接日期。
希望有人可以帮助我或指导这一点。欣赏它。
答案 0 :(得分:0)
对我来说,您的employee_holiday表似乎更像是一个日志表。如果你不介意我会使用不同的名字,我认为这些名称不仅仅适用于休假。
你会有一个名为employee_ leaveTime
的表,它会存储请假类型和剩余天数。然后在employee_leaveTime_log
(您已将其命名为employee_holiday
)中,您可以记录员工的请假(无论是度假,生病等)以及您想要跟踪的任何其他数据。然后从另一个表中的特定假期类型的剩余天数中减去。有了这个,你可以更好地增加时间。
我认为你可以用它来度过休假时间
答案 1 :(得分:0)
根据我的理解,我创建了以下脚本。 CTE部分将根据他在公司的服务计算员工的总休假。 “LeaveTaken”计算员工所有的叶子。最后,我采取了员工休假和休假的差额。如果这是一个负值,意味着员工已经提前休假,那么价值就是积极的。
将员工的ID传递给@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