我有一个场景。在一张桌子中,我有2个字段来检查患者。例如,如果患者有A'或者如果患者有B'
但是当我拉出记录时,我想要2个记录,一个用于A,一个用于B.我知道这可以使用UNION ALL完成但是有一种不同的方法可以做到这一点,因为UNION ALL将是太庞大的代码为了我。请帮忙!
示例就是这样。
在表患者中
PatientID Name Age HasA HasB
1234 Sad 18 Yes Yes
4567 Happy 40 Yes No
8901 confused 25 No Yes
所以我的查询应该返回:
PatientID Name Age Has
1234 Sad 18 A
1234 Sad 18 B
4567 Happy 40 A
8901 confused 25 B
如果它同时包含A和B,那么这是一种重复的行。
答案 0 :(得分:0)
虽然我认为union all
表现更好,但至少这是一种方法:
select PatientID, Name, Age, t2.Code as Has
from Table1 t1
left outer join Table2 t2 on
((t2.Code = 'A' and t2.Yes = T1.HasA) or
(t2.Code = 'B' and t2.Yes = T1.HasB))
中的示例
Table2只是一个包含A,Yes和B,Yes行的简单表。
答案 1 :(得分:0)
尝试。
select PatientId,Name,
(case
when HasA='Yes' Then 'A'
End) as Has
from Table1 where HasA='Yes'
Union All
select PatientId,Name,
(case
when HasB='Yes' Then 'B'
End) as Has
from Table1 where HasB='Yes'