Sql 1列比较2列结果的显示记录

Sql 1列比较2列结果的显示记录,sql,Sql,我已经提供了表格详细信息以及我的预期输出: 用户(Id、PersonId、IsBlocked、BlockedReason) 人员(身份证、名、姓) 简历(Id、个人Id、IsActive) 实际价值为 IsBlocked(是-1或否-0) IsActive(是-1或否-0) 我需要知道用户是否被阻止、活动、非活动。用户只能处于这3种状态中的1种 例如,若用户被阻止,他将不会处于活动状态-所以总体而言,我只需要1个状态。如何为这种情况编写SQL查询?使用case语句 SELECT p.Fi

我已经提供了表格详细信息以及我的预期输出:

  • 用户(Id、PersonId、IsBlocked、BlockedReason)
  • 人员(身份证、名、姓)
  • 简历(Id、个人Id、IsActive)
实际价值为

  • IsBlocked(是-1或否-0)
  • IsActive(是-1或否-0)
我需要知道用户是否被阻止、活动、非活动。用户只能处于这3种状态中的1种


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

使用
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

使用
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

在您的案例中,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

在您的案例中,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

请标记您正在使用的数据库。请以表格形式提供样本数据和预期结果。这里的读者非常希望鼓励新海报自己做出合理的努力,然后展示这种努力。对于不使用搜索引擎,我们并不认为初学者是合理的辩护理由。你现在能试试吗,让我们知道你想出了什么?请用你正在使用的数据库标记。请以表格形式提供样本数据和预期结果。这里的读者非常希望鼓励新海报自己做出合理的努力,然后展示这种努力。对于不使用搜索引擎,我们并不认为初学者是合理的辩护理由。你现在能试试看,让我们知道你的想法吗?@Vishal我的答案比这个答案早,你接受了,但你再次接受了这个答案,无视我的答案?Zaynulabadinthin和Zaynulabadinthin都做得一样好,但是stackoverflow只允许将一个标记为right@Vishal在这种情况下,回答第一的人必须考虑这个问题,我的回答是在回答这个问题之前10分钟,如果你认为你足够公平,那么谢谢。you@Vishal我的答案比这个答案早,你接受了,但是你再次接受了这个,忽略了我的答案原因?@Zaynulabadinuthin两者都做得很好,但stackoverflow只允许将其中一个标记为right@Vishal在这种情况下,回答第一的人必须考虑这个问题,我的回答是在回答这个问题前10分钟,如果你认为你足够公平,那么谢谢你。