SQL - 基于两列匹配将一个表的一部分连接到另一个表

时间:2011-06-28 19:49:15

标签: sql sql-server-2008

我有两个表,我希望将一个表中的数据合并到另一个表中。具体而言,Table_A是数百万来自医院的患者出院记录; table_B告知特定医院是否被标记为急救护理设施。我想抓住表A中医院是急救设施的所有记录。

表A有很多字段;相关性:

HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID

记录ID是唯一的。每个HOSTPIAL_ID有数百到数千条记录(RECORD_ID),每YEAR_AND_QUARTER有数百个HOSPITAL_ID

Table_B有几个字段:

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

使用Hospital_ID AND Year只能一起出现一次。

我无法加入Hospital_ID,因为在表B中,每个医院ID都不止一次出现。此外,table_B将所有季度数据归为一年(而不是2004Q1,2004Q2 ..仅2004年)。

因此,我想要的最终输出(最好作为新表)只是将ACUTE_INDICATOR添加到Table_A

HOSPITAL_ID | YEAR_AND_QUARTER | ACUTE_INDICATOR | RECORD_ID....

未来的应用,我是一个SQL婴儿,甚至不确定要搜索什么答案。我最好的猜测是(伪):

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

非常感谢:)

2 个答案:

答案 0 :(得分: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个,但仍然按照您想要的方式过滤,则不会给您任何重复的行。

答案 1 :(得分: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'