2011-06-28 35 views
1

我有兩個表,我正在將數據從一個表合併到另一個表中。具體而言,表A是來自醫院的數百萬條患者出院記錄; table_B會告訴某個醫院是否被標記爲急症室。我想要獲取醫院是急救醫院的A表的所有記錄。SQL - 根據匹配的兩列將一個表的一部分合併到另一個表中

表A有很多領域;的相關性:

HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID 

記錄ID是唯一的。有幾百到上千個HOSTPIAL_ID記錄的(RECORD_ID的),以及數百HOSPITAL_IDs每YEAR_AND_QUARTER

表-B有幾個領域:

HOSPITAL_ID | YEAR_ALONE | ACUTE_INDICATOR 
1223 | 2004 | X 
1223 | 2005 | X 
1289 | 2004 | 
1289 | 2005 | X 

隨着Hospital_ID和年存在的只有一次在一起。

我無法加入Hospital_ID,因爲在表B中,每個醫院ID都會出現多次。此外,table_B將所有季度數據彙總爲一年(而不是2004年Q1,2004年Q2只有2004年)。

因此最終輸出(最好的新表)我想只是ACUTE_INDICATOR加入到表-A

HOSPITAL_ID | YEAR_AND_QUARTER | ACUTE_INDICATOR | RECORD_ID.... 

Appologies未來,我是一個SQL嬰甚至不是很確定什麼尋找答案。我最好的猜測是(僞):

INNER JOIN (SELECT B.ACUTE_INDICATOR) 
ON A.HOSPITAL_ID = B.HOSPITAL_ID 
WHERE LEFT(A.YEAR_AND_QUARTER,4) = B.YEAR_ALONE 

非常感謝:)

+0

你試過嗎? INNER JOIN B ON A.HOSPITAL_ID = B.HOSPITAL_ID AND LEFT(A.YEAR_AND_QUARTER,4)= B.YEAR_ALONE – Greenisha

+0

是的 - 這給了我比table_A更多的行(我假設有重複)。我太缺乏經驗,不知道爲什麼。 – chris

回答

1

這將創建新表爲您提供:

SELECT 
    a.HOSPITAL_ID, 
    a.YEAR_AND_QUARTER, 
    b.ACUTE_INDICATOR, 
    a.RECORD_ID 
INTO c 
FROM 
    a JOIN 
    b ON a.HOSPITAL_ID = b.HOSPITAL_ID 
     AND LEFT(a.YEAR_AND_QUARTER, 4) = b.YEAR_ALONE 

然後,如果你想查詢該表僅用於急救機構...

SELECT * FROM c WHERE ACUTE_INDICATOR = 'x' 
+0

這工作除了它給重複,添加DISTINCT後SELECT解決了這一點。 – chris

1

我只想用EXISTS此:

<your select from table A> 
FROM TableA A 
WHERE EXISTS (SELECT 1 
       FROM TableB B 
       WHERE A.HOSPITAL_ID = B.HOSPITAL_ID 
       AND LEFT(A.YEAR_AND_QUARTER,4) = B.YEAR_ALONE 
       AND b.Acute-Indicator = 'X') 

這不會給你任何重複的行,如果有表B中的每家醫院1000個,但仍按您想要的方式篩選。

+0

這給了我正確的行數,但並沒有創建一個新的表格 - 投了票。 – chris

相關問題