【问题标题】:SQL View with Boolean value field带有布尔值字段的 SQL 视图
【发布时间】:2015-01-03 07:35:50
【问题描述】:

我有一个任务摆在我面前,这让我很困惑。

我有一个表格Employee,格式如下。 employee_id 是充当主键的自动递增字段。 employee_number 是公司给员工的 ID,在整个表格中是唯一的。

还有一个名为 Employee_Assignment 的表,其中包含员工对项目的分配信息。此表将仅包含那些有任务的员工的信息。一名员工可以有一项或多项任务。此表使用 Employee 表中的 employee_id 字段作为外键。此外,每个项目分配中的员工状态由 assignment_status_id 字段确定。

Assignment_Status 表如下。有 2 种类型的“活动”状态 - Active1 和 Active2。同样,有 2 种类型的“非活动”状态 - Inactive1 和 Inactive2:

我想创建一个视图Assignment_Status_View,格式如下:

视图应列出 Employee 表中的所有员工和一个布尔值,指示他们是否在任何项目中处于活动状态。随着新员工的加入,新记录将添加到 Employee 表中。此外,对于每个新的项目分配,都会将一条新记录添加到 Employee_Assignment 表中。视图应该能够捕获这两者。

overall_status 字段应显示员工在所有项目分配中的状态,即,如果员工有 10 个分配,并且他/她是否处于所有项目中的 2 个非活动状态中的任何一个分配,则 overall_status = 0。同样,如果员工在至少一个项目分配中处于 2 种活动状态中的任何一种,则 overall_status = 1。

您可以为我提供的任何帮助将不胜感激。

【问题讨论】:

  • 这听起来很简单,你具体有什么问题?
  • 我在添加overall_status 字段时遇到了困难。 sql 视图不需要所有字段都存在于某个表中吗?

标签: sql view boolean-logic


【解决方案1】:

基于 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

【讨论】:

  • 非常感谢您的回复。您的解决方案不起作用,因为 Employee_Assignment 表不包含 Employee_Number。 Employee_Assignment 包含与 Employee_Number 不同的 Employee_Id。 Employee_Id 是自动生成的值,而 Employee_Number 是公司为员工提供的 ID
  • @GuhanMurugesan,你的第二张表显示employee_number,如果是ID,那么你应该根据那个加入,应该可以。
  • 糟糕...我的错误。我已经对原帖进行了更正。 Employee_Number 存在于 Employee 表中,但不存在于 Employee_Assignment 表中。但是视图应该包含 Employee_Number
  • @GuhanMurugesan,有机会就采纳答案
  • 对不起,我对 Stackoverflow 还很陌生。我现在接受了你的回答。再次感谢
猜你喜欢
  • 2020-10-02
  • 2011-02-24
  • 1970-01-01
  • 1970-01-01
  • 2021-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-19
相关资源
最近更新 更多