根据条件拆分行

时间:2015-08-29 14:48:34

标签: sql-server split sql-server-2008-r2 rows

我有一个场景。在一张桌子中,我有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,那么这是一种重复的行。

2 个答案:

答案 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))

SQL Fiddle

中的示例

Table2只是一个包含A,Yes和B,Yes行的简单表。

答案 1 :(得分:0)

尝试。

Fiddle Demo

  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'