2011-06-28 16 views
1

私は2つのテーブルを持っており、あるテーブルのデータを別のテーブルにマージしようとしています。具体的には、Table_Aは、病院からの患者退院記録の数百万件である。 table_Bは、特定の病院が急性ケア施設として分類されているかどうかを示します。病院が急性ケア施設であるテーブルAからすべての記録を入手したいと思っています。SQL - あるテーブルの一部を別のテーブルに結合する2つのカラムに基づいて結合する

表Aには多くのフィールドがあります。関連性:

HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID 

レコードIDが一意です。 Hospital_IDと年が一緒に一度だけoccuringで

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

:YEAR_AND_QUARTER Table_Bはいくつかのフィールドを持っている

あたりのレコードの(RECORD_IDさん)HOSTPIAL_IDあたり数百〜数千、およびHOSPITAL_IDsの何百もあります。

表Bでは、各病院IDが複数回出現するため、私はHospital_IDに参加できません。また、table_Bは、すべての四半期データを1年に集計します(2004Q1、2004Q2 .. 2004年のみではなく)。

このように私はしたい最終出力(新しいテーブルとして好ましくは)ちょうどACUTE_INDICATORはAppologies先に、私はSQLの幼児だと何にでもかなり確実ではなかったTable_A

HOSPITAL_ID | YEAR_AND_QUARTER | ACUTE_INDICATOR | RECORD_ID.... 

を追加します答えを探す。私の最高の推測では(擬似)となりました:

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 A. A.HOSPITAL_ID = B.HOSPITAL_IDと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

これは重複を与えた以外は機能し、SELECTの後にDISTINCTが追加されました。 – 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の病院あたり1000sですが、依然として必要な方法でフィルタリングします。

+0

これは私に正しい行数を与えますが、新しい表を作成しません - 投票しました。 – chris

関連する問題