2011-06-28 2 views
1

J'ai deux tables et je cherche à fusionner des données d'une table dans une autre. Plus précisément, Table_A est des millions de dossiers de patients provenant des hôpitaux; table_B indique si un hôpital particulier est étiqueté comme établissement de soins actifs. Je veux récupérer tous les dossiers du tableau A où l'hôpital est un établissement de soins actifs.SQL - Joindre une partie d'une table dans une autre, basée sur deux colonnes correspondant

Le tableau A comporte plusieurs champs; de pertinence:

HOSPITAL_ID | YEAR_AND_QUARTER | RECORD_ID 

Avec l'ID d'enregistrement étant unique. Il y a des centaines de milliers de record de (RECORD_ID de) par HOSTPIAL_ID, et des centaines de HOSPITAL_IDs par YEAR_AND_QUARTER

Table_B a quelques champs:

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

Avec Hospital_ID ET année qu'une seule fois ensemble se produisant.

Je ne peux pas me joindre à Hospital_ID, car dans le Tableau B, chaque ID d'hôpital apparaît plusieurs fois. En outre, table_B regroupe toutes les données trimestrielles en une année (au lieu de 2004T1, 2004T2 .. seulement 2004).

Ainsi la sortie finale (de préférence sous forme d'une nouvelle table) Je veux juste ACUTE_INDICATOR est ajouté à TABLE_A

HOSPITAL_ID | YEAR_AND_QUARTER | ACUTE_INDICATOR | RECORD_ID.... 

appologies avant, je suis un enfant en bas âge SQL et était même pas tout à fait sûr de ce que chercher une réponse Mes meilleures estimations étaient (pseudo):

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

Un grand merci :)

+0

avez-vous essayé? INNER JOIN B SUR A.HOSPITAL_ID = B.HOSPITAL_ID ET GAUCHE (A.YEAR_AND_QUARTER, 4) = B.YEAR_ALONE – Greenisha

+0

Oui - cela me donne plus de lignes que dans table_A (doublons je suppose). Je suis trop inexpérimenté pour avoir une idée de pourquoi. – chris

Répondre

1

Cela va créer la nouvelle table pour vous:

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 

Alors si vous voulez interroger cette table pour établissements de soins de courte durée seulement ...

SELECT * FROM c WHERE ACUTE_INDICATOR = 'x' 
+0

Cela a fonctionné sauf qu'il a donné des doublons, ajouté DISTINCT après SELECT qui a résolu cela. – chris

1

Je voudrais simplement utiliser EXISTS pour cela:

<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') 

Vous ne donnera pas toutes les lignes en double s'il y a 1000s par hôpital dans la table B mais filtre toujours comme vous le souhaitez.

+0

Cela me donne le nombre exact de lignes, mais ne crée pas une nouvelle table - voté. – chris

Questions connexes