SQL - объединить часть одной таблицы в другую на основе сопоставления двух столбцов - PullRequest
1 голос
/ 28 июня 2011

У меня есть две таблицы, и я хочу объединить данные из одной таблицы в другую. В частности, Таблица_А представляет собой миллионы записей о выписках пациентов из больниц; table_B сообщает, помечена ли конкретная больница как учреждение неотложной медицинской помощи. Я хочу взять все записи из таблицы А, где Больница является центром неотложной помощи.

Таблица A имеет много полей; актуальности:

HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID

с уникальным идентификатором записи. На HOSTPIAL_ID приходится от сотен до тысяч записей (RECORD_ID), а на YEAR_AND_QUARTER

- сотни HOSPITAL_ID.

Таблица_B имеет несколько полей:

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

С Hospital_ID AND Годом встречаются только один раз вместе.

Я не могу присоединиться к Hospital_ID, потому что в Таблице B каждый идентификатор больницы встречается более одного раза. Кроме того, таблица_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 ]

1 голос
/ 29 июня 2011

Это создаст новую таблицу для вас:

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'
1 голос
/ 29 июня 2011

Я бы просто использовал 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 сек, но все равно будет фильтровать, как вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...