2011-06-28 39 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

相关问题