Eine Zeile auf der Grundlage einer Bedingung aufteilen

Ich habe ein Szenario. In einer Tabelle bekam ich 2 Felder, die für einen Patienten überprüfen. Zum Beispiel, wenn ein Patient 'A' hat oder wenn ein Patient 'B' hat.

Aber wenn ich die Platte ziehe, möchte ich 2 datasätze, eine für A und eine für B. Ich weiß, dass dies mit UNION ALL getan werden könnte, aber gibt es einen anderen path, dies zu tun, weil UNION ALL wird viel zu sperrig Code für mich. Bitte helfen!

Beispiel wäre so.

In Tabelle Patienten

PatientID Name Age HasA HasB 1234 Sad 18 Yes Yes 4567 Happy 40 Yes No 8901 confused 25 No Yes 

also sollte meine frage zurückkehren:

 PatientID Name Age Has 1234 Sad 18 A 1234 Sad 18 B 4567 Happy 40 A 8901 confused 25 B 

also eine Art doppelte Zeile, wenn es sowohl A als auch B hat.

Obwohl ich die union all annehmen würde, würde union all besser sein, aber zumindest ist das eine Möglichkeit, es zu tun:

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

Beispiel in SQL Fiddle

Tabelle2 ist nur eine einfache Tabelle, die A, Ja und B, Ja Zeilen hat.

Versuchen.

Geige 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'