显示1列记录,比较2列结果

时间:2018-11-17 12:44:39

标签: sql

我提供了表的详细信息以及预期的输出是什么

  • 用户(ID,PersonId,IsBlocked,BlockedReason)
  • 人员(ID,名字,姓氏)
  • 恢复(Id,PersonId,IsActive)

实际值为

  • 被阻止(是-1或否-0)
  • 处于活动状态(是-1或否-0)

我需要知道用户是否被阻止,处于活动状态,处于非活动状态。在这3种状态中,用户只能处于1种。

例如,如果用户被阻止,他将不会处于活动状态-因此,总体而言,我只需要1个状态。如何为这种情况编写SQL查询?

2 个答案:

答案 0 :(得分:1)

使用CASE语句

SELECT p.FirstName,p.LastName,
       CASE WHEN t.IsBlocked=1 THEN 'Blocked'
            WHEN r.IsActive =1 THEN 'Active'
            ELSE 'Inactive' END as user_status
FROM User t JOIN Person p ON t.PersonId=p.Id
                     JOIN Resume r ON t.PersonId=r.PersonId

答案 1 :(得分:1)

在您的情况下,Person是包含所有人员的主表,因此您应该让该用户退出并继续向该用户恢复表,并使用case语句获取状态,

 SELECT P.ID,P.FirstName,p.LastName,case when T.IsBlocked=1 then 'Blocked'
               when R.IsActive =1 then 'Active'
               else  'Inactive' end as user_status
  FROM  Person P 
  LEFT JOIN User U on P.ID=U.PersonId
  LEFT JOIN Resume R on P.Id=R.PersonId