2013-04-03 34 views
1

嗨不知道是否有人可以幫助我處理這個查詢。我有一個數據集,其中有兩列。 A欄/ B欄;我們稱之爲Table UpdateData。在SQL查詢中映射兩個不同的列

還有兩個Access數據表,這些數據表是這些代碼的映射表。一個表是更新前代碼(oldCodes),另一個是後期更新代碼(NewCode)。在我的數據集中,列A具有更新前代碼,列B具有更新後代碼。我的想法是這兩個Access表新老代碼結合到SQL服務器(2005)一個表像這樣創建表combinedCodes:

Oldcode display 
=====  ======= 
RTYX45 No 
GHYUN6 No 
BYUER5 Yes 

Newcode display 
=====  ======= 
VUJNG6  Yes 
LERWS8  No 
XCRYU7  Yes 

code  display 
=====  ======= 
RTYX45 No 
GHYUN6 No 
BYUER5 Yes 
VUJNG6 Yes 
LERWS8 No 
XCRYU7 Yes 

注意這僅僅是數據的一個例子,有很多更行比顯示。

因此,如果我加入updateData和Combined代碼,我該如何設置它,以便一個字段(顯示)可以顯示來自列A/B(或不是)的匹配。當我只加入一列時,可以說列A與左連接到來自combinedCodes表的updateData表中我在我的combinedCodes顯示字段中獲得了正確的數據,並且爲那些不匹配的元素指定了空值。

但後來我引入了另一個連接從列B使用左連接到我的更新數據表CombinedCodes和combinedCodes顯示舊代碼之前,空值,我想要的,但也顯示舊代碼之前新代碼是用過的。我對實際發生的事情有些混淆,因此這可能不是100%正確的,但是當比較每個查詢結果與單個連接時,查詢結果與列A和列B的連接是不同的,儘管添加時數據的計數相同從單獨的查詢中提取個人數量。

select c.Fields 
--,f.Display 
,pt.Display 
from UpdateData c 
INNER JOIN PRE_CODES pt 
ON c.columnA = pt.code -- only for pre-codes 
--INNER JOIN POST_CODES f 
--ON c.columnB = f.code 

註釋掉的連接和字段用於後綴代碼,另一個用於預代碼。如果我包含左外部聯接以顯示郵政編碼的空值,然後引入第二個聯接和f.display加上左側聯接字段它不顯示相同的結果,如果我分別運行每個並將它們組合。

這種連接是超越我加入的理解,我不知道我應該在這裏做什麼,以便在任何你誰可以幫我這個

感謝

安德魯

回答

1

如果我明白你想要做什麼,我可以看到幾個選項。

一種是編寫兩個查詢,每個代碼表(每種情況下都有一個內部聯接,因此您沒有任何空值),然後使用UNION組合結果併爲組合表生成數據。

另一種方法是編寫一個連接到具有左外連接的每個表的單個查詢,這將導致一個列具有一個值或一個表爲null,另一列具有值或另一個表爲空。然後向使用COALESCE的結果添加另一列,將這兩列合併爲一個非空列。

+0

嘿,+1比一般的過度文字連接寫法更好的答案!很好的問題。 – criticalfix

+0

@JacobM當然(用手掌打額頭)結合是一個非常好的選擇!一段時間沒有使用SQL,完全忘了!你的其他選擇是我在做什麼的一半,但你已經提供了一個解決方案,分別顯示每個列結果,然後將它們結合起來。最重要的是,我還試圖理解兩個連接到同一個表的邏輯/方法/在一列中顯示結果,這不是我必須做的事情,所以這是一個有趣的問題。 – Andrew

+0

@JacobM感謝您的解決方案 – Andrew