SQL:如何在一个语句中有条件输出

时间:2019-07-17 22:05:41

标签: sql

餐桌人物

id | name | age
---------------
1  | max  | 30
2  | sue  | 28
3  | ada  | 22
4  | sam  | 31
5  | test | 0

桌男

id  | personid
--------------
1   | 1
2   | 4
3   | 5

桌女

id  | personid
--------------
1   | 2
2   | 3
3   | 5

如何获得这样的输出?因此,一列(性别)应该与另一个表中的存在以及输出有关。

name | gender
-------------
max  | M
sue  | F
ada  | F
sam  | M
test | X

3 个答案:

答案 0 :(得分:1)

尝试使用嵌套的IIF语句进行以下操作:

SELECT p.[Name], IIF(m.ID IS NOT NULL AND f.ID IS NOT NULL, 'X', IIF(m.ID IS NOT NULL, 'M', 'F')) AS Gender
FROM Person p
LEFT OUTER JOIN Male m ON p.ID = m.PersonID
LEFT OUTER JOIN Female f ON p.ID = f.PersonID

答案 1 :(得分:1)

您可以使用CASE语句从性别表中进行查找,如下所示:

SELECT a.name, 
  CASE WHEN EXISTS (SELECT personid FROM TableMale b WHERE b.personid = a.ID) THEN 'M' 
       WHEN EXISTS (SELECT personid FROM TableFemale c WHERE c.personid = a.ID) THEN 'F' 
  END AS Gender  
FROM TablePerson a 

答案 2 :(得分:1)

Personid 5是男性还是女性。我不想丢失此信息。所以:

select p.name,
       (case when m.personid is not null and f.personid is not null
             then 'X'  -- both
             when m.personid is not null
             then 'M'
             when f.personid is not null
             then 'F'
        end) as gender
from person p left join
     male m
     on p.id = m.personid left join
     female f
     on p.id = f.personid;
相关问题