Sql server 基于条件拆分行
我有一个设想。在一个表中,我得到了两个字段,用于检查患者。例如,如果患者有“a”或“B” 但是当我提取记录时,我需要2条记录,一条用于A,一条用于B。我知道这可以使用UNION ALL来完成,但是有没有其他方法来完成,因为UNION ALL对我来说太庞大了。请帮忙 例子是这样的 住院病人Sql server 基于条件拆分行,sql-server,split,sql-server-2008-r2,rows,Sql Server,Split,Sql Server 2008 R2,Rows,我有一个设想。在一个表中,我得到了两个字段,用于检查患者。例如,如果患者有“a”或“B” 但是当我提取记录时,我需要2条记录,一条用于A,一条用于B。我知道这可以使用UNION ALL来完成,但是有没有其他方法来完成,因为UNION ALL对我来说太庞大了。请帮忙 例子是这样的 住院病人 PatientID Name Age HasA HasB 1234 Sad 18 Yes Yes 4567 Happy 40 Yes
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,则是一种重复的行。虽然我认为
联合所有
的性能会更好,但至少这是一种方法:
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))
举例
表2只是一个简单的表,其中有a,Yes和B,Yes行。虽然我假设
联合所有的
都会执行得更好,但至少这是一种方法:
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))
举例
表2只是一个简单的表,有a,Yes和B,Yes行。试试看
试试看