2015-05-11 151 views
1

我試圖連接中的兩個表格,其中連接條件爲part of(A.col1) = B.col2的MS Access 2010。到目前爲止,我還無法弄清楚如何做到這一點。Access中部分列的內部連接

我的兩個表中存在這些關鍵列:

  1. 表1具有柱ICD9 Code-Description *與像值:
    842.00 - Sprain/strain, wrist
    924.11 - Contusion, knee
  2. 表2具有列Dx與像值:
    842
    924.11

我已經試過這兩個加入cri特里亞:

FROM Table1 
    INNER JOIN Table2 ON Table1.Replace(LTrim(Replace(Left(ICD9Code-Description], 
          (InStr(1,[ICD9Code-Description]," "))-1),"0"," "))," ","0") 
         = Table2.Dx 

SELECT ICD9 
    FROM Table2 INNER JOIN 
     (SELECT Replace(LTrim(Replace(Left([ICD9 Code-Description], 
       (InStr(1,[ICD9 Code-Description]," "))-1),"0"," "))," ","0") AS ICD9 
      FROM Table1) 
     ON Diag.DX = ICD9 

既不的訪問喜歡。

如果可能的話,我想避免將連接標準部分拉出到它自己的列中Table1

這樣做的Access方式是什麼?

*不要恨我的列名。我沒有創建它,我只需要支持它。

回答

3

Val()函數「返回包含在字符串中的數字作爲適當類型的數值。」(見Val函數幫助主題在Access中的內置幫助系統。)

的‘妙處’爲你的情況是它從字符串讀取字符,直到它遇到不能爲部分字符的有效數字。但是,它不會拋出錯誤。它只保留已收集的數字字符,並忽略其餘部分。

下面是兩個在即時窗口,你的例子...

? Val("842.00 - Sprain/strain, wrist") 
842 
? Val("924.11 - Contusion, knee") 
924.11 

所以Val()應該讓你JOIN簡單得多,即使你還需要它適用於Table2.Dx串...

FROM 
    Table1 INNER JOIN Table2 
    ON Val(Table1.[ICD9Code-Description]) = Val(Table2.Dx) 
+0

是的,可悲的是,'Table2.D'實際上是一個文本字段。我剛剛意識到這一點。 'Str(Val(ICD9Code-Description]))= Table2.Dx'修復了,但是現在我沒有得到任何結果而不是錯誤。我將不得不再次擊敗我的頭。好消息是'Table2.Dx'具有'Dx = 842'作爲文本字符串,而不是'Dx = 842.00',所以簡單的'Str()'修復了它。不過,感謝'Val()'是一個非常有用的功能,並且更容易閱讀之前的災難! – FreeMan

+0

你先生,是天才!我不確定爲什麼當Str(val())= ...'沒有,但我會接受!我還想扼殺那些設計這個數據庫的人爲他瘋狂的專欄名稱和列中數據的混亂組合,但幸運的是,他不再在這裏工作。如果他是,我可能會在酒吧後面...:/ – FreeMan

+0

我很高興它可以工作,但它似乎對我來說太多的運行時間箍。 :-)如果你堅持使用這種桌面設計,我唯一能提供的就是同情。 :-0 – HansUp