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

SQL-基于两列匹配,将一个表的一部分连接到另一个表中,sql,sql-server-2008,Sql,Sql Server 2008,我有两个表,我希望将数据从一个表合并到另一个表中。具体而言,表A是医院数百万患者出院记录;表B显示了某一特定医院是否被标记为急性护理设施。我想从表A中获取所有记录,该医院是一家急症护理机构 表A有许多字段;相关性: HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID 记录ID是唯一的。每个主机ID有数百到数千个记录ID,每年和每个季度有数百个医院ID 表B有几个字段: HOSPITAL_ID | YEAR_ALONE | ACUTE_INDICATOR 122

我有两个表,我希望将数据从一个表合并到另一个表中。具体而言,表A是医院数百万患者出院记录;表B显示了某一特定医院是否被标记为急性护理设施。我想从表A中获取所有记录,该医院是一家急症护理机构

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

HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID
记录ID是唯一的。每个主机ID有数百到数千个记录ID,每年和每个季度有数百个医院ID

表B有几个字段:

HOSPITAL_ID | YEAR_ALONE | ACUTE_INDICATOR
1223 | 2004 | X  
1223 | 2005 | X  
1289 | 2004 |  
1289 | 2005 | X  
医院ID和年份只同时发生一次

我不能加入医院ID,因为在表B中,每个医院ID出现不止一次。此外,表B将所有季度数据汇总为一年,而不是2004年第一季度、2004年第二季度。。仅2004年

因此,最终输出最好是作为我想要的一个新表添加到表中

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
非常感谢:

我只想使用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个,则这不会给您任何重复行,但仍会按您希望的方式进行筛选。

这将为您创建新表:

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'

你试过这个吗?A.HOSPITAL\u ID=B.HOSPITAL\u ID和LEFTA.YEAR\u AND\u QUARTER,4=B.YEAR\u ALONEYes上的内部连接B-这给了我比表A中重复的行更多的行。我太没经验了,不知道为什么。这给了我正确的行数,但没有创建一个新的表-投票。这是有效的,除了它提供了重复的,在选择后添加了DISTINCT,解决了这个问题。