2015-04-01 40 views
-2

我有這個表列患者#和不良事件:需要SQL語句連接數據的兩個列表成爲一個具有一個共同的變量

0101  Headache 
0101  Vomiting 
0105  Pink eye 
0201  Fever 
0201  Skin Rash 
0201  Cold 
0204  Coughing

並與列患者#和藥物的第二個表:

0101  Aspirin 
0201  Tylenol 
0201  Hydrocortisone 
0201  Midol 
0201  Benedryl 
0201  Advil 
0203  Ginkgo Biloba 
0204  Advair 
0204  Triaminic

我想一個SQL查詢,將結合2只列出這樣的:

0101  Headache Aspirin 
0101  Vomiting 
0105  Pink eye  
0201  Fever  Tylenol 
0201  Skin Rash Hydrocortisone 
0201  Cold  Midol 
0201     Benedryl 
0201     Advil 
0203     Ginkgo Biloba 
0204  Coughing Advair 
0204     Triaminic 

基本上只是一起由患者#(不良事件和藥物之間沒有關係)

+1

這表 – Lamak 2015-04-01 14:26:21

回答

0

簡單連接,不會給你的結果,你需要有一個row number partitioned by patient

select nvl(t1.patient,t2.patient),t1.adverse,t2.medication 
from (select patient, 
      adverse, 
      row_number() over (partition by patient order by patient) rn 
     from tbl1) t1 
full outer join (select patient, 
      medication, 
      row_number() over (partition by patient order by patient) rn 
     from tbl2) t2 
on t1.patient= t2.patient 
    and t1.rn=t2.rn 
    order by 1,2 
+0

這樣做了!非常感謝!! – pbpb 2015-04-01 15:58:51

+0

你非常歡迎 – jfun 2015-04-01 15:59:30

1

完全外部聯接會給你你想要的結果傾倒2代表的內容:

​​
+0

感謝您的答覆......我用上面的代碼試圖之間的簡單連接,但它產生一個笛卡爾加入 - 它匹配每個不良事件與該患者的每種藥物...因此,如果患者有2個AE和4個藥物,結果是8行 - 我想要4行,前2個包含第一個2個AE和Med,那麼最後2個只包含剩下的2個藥物。 – pbpb 2015-04-01 15:09:53

1

你的表定義是錯誤的。患者#0101在表1中出現兩次,在表2中出現一次。您如何知道阿司匹林是否是頭痛或嘔吐的正確藥物?在這種情況下,所加入的聯合會爲您提供與兩種情況相同的藥物。

+0

我實際上不想嘗試和匹配不良事件和藥物......只是按照每個患者的字母順序排列它們 - 除了患者編號之外沒有任何關係...所以結果將由患者按字母順序排列按字母順序排列的藥物列表旁邊的AE列表 - 我知道這很奇怪... – pbpb 2015-04-01 15:34:14

相關問題