Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 基于条件拆分行_Sql Server_Split_Sql Server 2008 R2_Rows - Fatal编程技术网

Sql server 基于条件拆分行

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

我有一个设想。在一个表中,我得到了两个字段,用于检查患者。例如,如果患者有“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,则是一种重复的行。

虽然我认为
联合所有
的性能会更好,但至少这是一种方法:

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行。

试试看

试试看