我面前的任务真让我高兴。
我有以下格式的表格 员工 。 employee_id 是自动递增的字段,充当主键。 employee_number 是公司为员工提供的ID,在整个表格中是唯一的。
还有另一个名为 Employee_Assignment 的表,其中包含员工对项目的分配信息。此表将仅包含具有分配的员工的信息。一名员工可以有一项或多项任务。此表使用 Employee 表中的 employee_id 字段作为外键。此外,每个项目分配中的员工状态由 assignment_status_id 字段确定。
Assignment_Status 表格如下。有两种类型的' Active'状态 - Active1和Active2。同样,有两种类型的“非活动”'状态 - Inactive1和Inactive2:
我想创建一个视图 Assignment_Status_View ,其格式如下:
视图应列出Employee表中的所有员工以及一个布尔值,该值指示它们是否在任何项目中处于活动状态。随着新员工的加入,新记录将添加到 员工 表中。此外,对于每个新项目分配,新记录将添加到 Employee_Assignment 表中。该视图应该能够捕获这两者。
overall_status 字段应显示员工'所有项目任务的状态,即,如果员工有10个任务,并且如果他/她处于所有任务中的2个非活动状态中的任何一个,那么 overall_status = 0.同样,如果员工在至少一个项目分配中处于2个活动状态中的任何一个,然后 overall_status = 1。
非常感谢您提供给我的任何帮助。
答案 0 :(得分:2)
基于CASE的聚合可用于查看员工是否至少存在一个活动状态。
使用left join
确保在分配状态中没有记录的员工也会被计算在内。
SELECT E.employee_Number, E.name, T.OverAllStatus FROM
employee E
JOIN (
SELECT E.employee_Number,
case when COALESCE(SUM( case when EA.assignment_status_id in ( 1,3)
then 1
else 0
end ),0) >0
then 1 else 0 end as OverAllStatus
FROM Employee E
LEFT JOIN Employee_Assignment EA
ON E.employee_id = EA.employee_id
GROUP BY E.employee_Number
) T
ON E.employee_Number = T.employee_Number