2014-05-06 5 views
0

Je tire un code (ICD9) qui se trouve dans la table AbsDrgDiagnosis.Diagnosis. Je dois tirer un autre code (SNOMED_CT) qui est dans une autre table DMisNomenclatureMapCodes.CodeID quand DMisNomenclatureMapCodes.CodeSetID = « SNOMED_CT »Exécution de plusieurs sous-requêtes

Alors seul moyen de relier ces deux tableaux est par AbsDrgDiagnosis.Diagnosis = DMisNomenclatureMapCodes.CodeID quand DMisNomenclatureMapCodes.CodeSetID = 'ICD9'

Par exemple, je dois signaler 3942005 de DMisNomenclatureMapCodes.CodeID lorsque CodeSetID = 'SNOMED_CT'.

EXAMPLE DATA: 
           Diagnosis 
AbsDrgDiagnosis     290.23 

           CodeID   CodeSetID MisNomenclatureMapID 
DMisNomenclatureMapCodes  290.23   ICD9   IMO-PROC-99959 
           3942005  SNOMED_CT IMO-PROC-99959 
           53899   CPT   IMO-PROC-99959 

Jusqu'à présent, je ne peux comparer AbsDrgDiagnosis.Diagnosis sur DMisNomenclatureMapCodes.CodeID, qui tous deux égaux 290,23, mais après que je suis perdu comment j'obtenir le code SNOMED. Je suppose que je dois faire une autre sous-requête sur DMisNomenclatureMapCodes.MisNomenclatureMapID pour obtenir le groupement, puis trouver le CodeSetID de SNOMED_CT pour obtenir la valeur finale de CodeID 3942005. comment puis-je tenter cela? Toute aide serait grandement appréciée, j'ai essayé quelques sous-requêtes mais elles ont fait une erreur. Je suis nouveau à SQL donc si je n'ai pas dit quelque chose correctement ou écris de manière experte s'il vous plaît soyez gentil.

CODE: 
DECLARE 
    SET @StartDate = '10/28/2013 00:00:000' 
    SET @EndDate = '12/28/2013 23:59:000' 

SELECT 
    ,Diagnosis AS Code_3 
    ,DMisNomenclatureMapCodes.CodeID 
    ,DMisNomenclatureMapCodes.MisNomenclatureMapID 

FROM AbsDrgDiagnoses 

    LEFT JOIN AbstractData 
    ON AbstractData.VisitID = AbsDrgDiagnoses.VisitID 
    LEFT JOIN DMisNomenclatureMapCodes 
    ON DMisNomenclatureMapCodes.CodeID = AbsDrgDiagnoses.Diagnosis 

WHERE AbstractData.DischargeDateTime BETWEEN @StartDate and @EndDate 

Répondre

0

Merci à tous ceux qui ont répondu à cette question. Comme il s'est avéré que je devais construire quelques sous-requêtes pour réaliser ce que je voulais. Le fond la plupart des sous-requête renvoie les résultats de la carte de nomenclature lorsque les deux codes ICD9 sont présents via

NMC.CodeID = AbsDrgDiagnoses.Diagnosis. 

Maintenant, cela a été mon problème, je ne savais pas que vous pourriez inclure une instruction AND dans la sous-requête lorsqu'elle renvoyait un seul résultat d'une autre sous-requête, a appris quelque chose de nouveau! Ainsi, je ne pouvais revenir le CodeSetID de « SNOMED_CT » et non la CodeID réelle de 5510009. En mettant en

WHERE NMC.CodeSetID = 'SNOMED_CT' AND NMC.MisNomenclatureMapID IN 

J'étais alors en mesure de retourner la valeur nécessaire.

CODE:

,COALESCE((SELECT NMC.CodeID 
    FROM DMisNomenclatureMapCodes NMC 
    WHERE NMC.CodeSetID = 'SNOMED_CT' AND NMC.MisNomenclatureMapID IN 
    (SELECT NMC.MisNomenclatureMapID 
     FROM DMisNomenclatureMapCodes NMC 
     WHERE (NMC.CodeID = AbsDrgDiagnoses.Diagnosis) 
    ) 
),'') AS SNOSet_TEST 
+0

Techniquement, je ne pouvais pas faire une jointure de NMC.CodeID = AbsDrgDiagnoses.Diagnosis, puis faire une sous-requête sur la jointure? – Rich

1

Compte tenu de cette "Alors seul moyen de relier ces deux tableaux est par AbsDrgDiagnosis.Diagnosis = DMisNomenclatureMapCodes.CodeID quand DMisNomenclatureMapCodes.CodeSetID = 'ICD9'", ne pouvait vous changer ceci:

LEFT JOIN DMisNomenclatureMapCodes 
ON DMisNomenclatureMapCodes.CodeID = AbsDrgDiagnoses.Diagnosis 

à ceci:

LEFT JOIN DMisNomenclatureMapCodes 
ON DMisNomenclatureMapCodes.CodeID = AbsDrgDiagnoses.Diagnosis 
and DMisNomenclatureMapCodes.CodeSetID = 'ICD9' 

?

+0

Merci Dan pour votre réponse. Si je place le CodeSetID = 'ICD9' il retournera ce qu'il retourne maintenant. Lorsque AbsDrgDiagnoses.Diagnosis a un nombre c'est toujours ICD9 et quand AbsDrgDiagnoses.Diagnosis = DMisNomenclatureMapCodes.CodeID ce sera toujours 'ICD9'. – Rich

+0

Donc, la façon dont je pense qu'il doit être fait est de trouver la correspondance entre AbsDrgDiagnoses.Diagnosis = DMisNomenclatureMapCodes.CodeID, puis faire une recherche basée sur le champ DMisNomenclatureMapCodes.MisNomenclatureMapID pour obtenir le code SNOMED_CT. Au moins c'est ce que je pense mais je suis ouvert à toutes les suggestions. :) – Rich

Questions connexes