Php 用于计算每个部门每天10%的假期配额的存储过程

Php 用于计算每个部门每天10%的假期配额的存储过程,php,sql-server,stored-procedures,Php,Sql Server,Stored Procedures,在一家公司里,有各种各样的部门,例如, A部门有300名员工 B部门有150名员工 C部门有400名员工 D部门有50名员工 需要一个存储过程来计算每个部门每天只允许10%的假期。。。。如果员工以php表格申请休假, 他会收到一条错误消息,说这一天10%的假期配额已满,试着改天申请如果不知道您的表架构是什么,很难给出答案,但如果我们假设您有一个包含员工ID和部门的员工表,还有一个包含员工ID和休假日期的leaves表,那么获取百分比就非常简单了 下面是一个查询,它将获取给定日期休假人员的百分比,

在一家公司里,有各种各样的部门,例如, A部门有300名员工 B部门有150名员工 C部门有400名员工 D部门有50名员工

需要一个存储过程来计算每个部门每天只允许10%的假期。。。。如果员工以php表格申请休假,
他会收到一条错误消息,说这一天10%的假期配额已满,试着改天申请

如果不知道您的表架构是什么,很难给出答案,但如果我们假设您有一个包含员工ID和部门的
员工
表,还有一个包含员工ID和休假日期的
leaves
表,那么获取百分比就非常简单了

下面是一个查询,它将获取给定日期休假人员的百分比,您可以修改它以返回实际需要的内容。实际上,您将employee表的
外部联接到leaves表。如果leaves表中没有匹配的员工,则该表中的列将为null,并且您可以计算非null值以确定有多少员工在休假。然后将其按部门分组,以获得每个部门的百分比

select
    e.department,
    count(e.employee_id) as employees,

    -- Use a case statement to determine if the employee is on leave. 
    sum(case when (l.employee_id is null) then 0 else 1 end) as leaves,

    -- Note that when dividing two ints, the result will be an int as well. Convert one value to float so that it returns a float.
    sum(case when (l.employee_id is null) then 0 else 1 end) / convert(float, count(e.employee_id)) as percent
from
    employee e,
    left outer join leaves l
        on (e.employee_id=l.employee_id and l.leave_date = 'June 1, 2018')
where
    e.department = 'IT' -- You can specify the department, or leave it out to list all departments
group by
    e.department

你们有一张员工桌和一张请假桌吗?你能提供一些数据样本吗?为了扩展@RToyo所说的内容,你能提供一些例子,说明你是如何尝试这样做的吗?请进一步解释失败的原因?这是一个很好的起点。当同一个表有左连接和where谓词时,逻辑上将左连接转换为内部连接。对于这些类型的事情,您应该将谓词移动到join,而不是where子句。但这是一次非常高尚的努力,几乎没有给出任何细节。@SeanLange感谢您指出这一点,这是我愚蠢的疏忽。答案已经被更正了。这几乎不是我所说的哑巴。我赞赏你盲目提供解决办法的努力。它甚至可能有点接近他们想要的