2016-01-13 92 views
0

我是新來的sql所以讓我道歉,我開始之前之間。查找匹配或不匹配的兩個表

我試圖國旗我會撥打以下方式保單號碼相匹配。

Select c.last_name, c.first_name, c.sex, c.date_of_birth, c.record_nbr, 
case when ph.policy_nbr = cp.policy_nbr then ph.policy_nbr else 'No Match' 

From table ph 

Left join client c 
On ph.last_name = c.last_name 
And ph.first_name = c.first_name 
And ph.date_of_birth = c.date_of_birth 
And ph.sex = c.sex 
Left join person_payer cp 
On c.person_id = cp.person_id 

Group by c.last_name, c.first_name,c.date_of_birth, 
c.sex,ph.policy_num, cp.policy_nbr 

這個想法是根據姓氏,名字,dob和性別找到匹配表。然後我想驗證一個保單號上的匹配或不匹配。患者記錄中是否存在保單編號?不幸的是,由於客戶記錄中存在多個保單編號,因此這會產生匹配並且不匹配。我如何才能在報告列表中列出客戶一次且僅列出「不匹配」或匹配保單編號。

+1

樣本數據和預期的結果將澄清你正在嘗試做的。 –

+0

你是否遺漏了一個連接,因爲沒有連接到表別名pp。而ph是表名「table」的別名吧? –

+0

所以我想向客戶展示在姓氏,名字,dob和性別上找到完全匹配的地方。然後報告在客戶的person_payer表上是否找到匹配的保單號碼。問題是person_payer表擁有多個保單號碼。我需要它只顯示一次匹配或找不到匹配。我會進一步補充,現在開車回家。 –

回答

0

假設策略表的名字是PolicyTable(因爲它的命名錶,但SQL Server的抱怨吧),你可以做選擇的單柱,而不是加入。

Select c.last_name, c.first_name, c.sex, c.date_of_birth, c.record_nbr, 
ISNULL((Select top 1 ph.policy_nbr from PolicyTable ph where ph.last_name = c.last_name 
And ph.first_name = c.first_name 
And ph.date_of_birth = c.date_of_birth 
And ph.sex = c.sex 
And cp.policy_nbr = ph.policy_nbr), 'No Match') as PolicyNumber 

From client c 
Left join person_payer cp On c.person_id = cp.person_id 
+0

不幸的是,這會產生結果,但查詢從不停止運行。 –

0
Select c.last_name, c.first_name, c.sex, c.date_of_birth, c.record_nbr, 
isnull(cp.policy_nbr, 'No Match') 

From table ph 

Left join client c 
On ph.last_name = c.last_name 
And ph.first_name = c.first_name 
And ph.date_of_birth = c.date_of_birth 
And ph.sex = c.sex 
Left join person_payer cp 
On c.person_id = cp.person_id 
and ph.policy_nbr = cp.policy_nbr 

Group by c.last_name, c.first_name,c.date_of_birth, 
c.sex,ph.policy_num, cp.policy_nbr 
+0

謝謝,但是我已經注意到這會產生結果,但所有列中都有很多空值。 –