运行多个子查询

时间:2014-05-06 19:27:49

标签: sql subquery icd snomed-ct

我正在拉一个代码(ICD9),它在表AbsDrgDiagnosis.Diagnosis中。当DMisNomenclatureMapCodes.CodeSetID =' SNOMED_CT'

时,我需要拉另一个代码(SNOMED_CT),这是另一个表DMisNomenclatureMapCodes.CodeID

然后,当DMisNomenclatureMapCodes.CodeSetID =' ICD9'

时,只能通过AbsDrgDiagnosis.Diagnosis = DMisNomenclatureMapCodes.CodeID链接这两个表。

因此,例如,当CodeSetID =' SNOMED_CT'时,我必须从DMisNomenclatureMapCodes.CodeID报告3942005。

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

到目前为止,我只能比较DMisNomenclatureMapCodes.CodeID上的AbsDrgDiagnosis.Diagnosis,它们都等于290.23,但之后我就失去了如何获得SNOMED代码。我假设我必须在DMisNomenclatureMapCodes.MisNomenclatureMapID上做另一个子查询来获取分组,然后找到SNOMED_CT的CodeSetID以获得CodeID 3942005的最终值。 我该如何尝试?任何帮助将不胜感激,我尝试了几个子查询,但他们错了。我是SQL的新手,所以如果我没有正确说出来或以专家的方式写它,请善待。

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

2 个答案:

答案 0 :(得分:1)

鉴于此,“然后只有这两个表的链接是通过AbsDrgDiagnosis.Diagnosis = DMisNomenclatureMapCodes.CodeID当DMisNomenclatureMapCodes.CodeSetID ='ICD9'”时,你不能只改变这个:

LEFT JOIN DMisNomenclatureMapCodes
ON DMisNomenclatureMapCodes.CodeID = AbsDrgDiagnoses.Diagnosis

到此:

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

答案 1 :(得分:0)

感谢所有回复此问题的人。事实证明,我必须构建几个子查询来实现我想要的。当通过

存在两个ICD9代码时,最底部的子查询返回命名映射结果
NMC.CodeID = AbsDrgDiagnoses.Diagnosis. 

现在这是我的问题,我不知道你可以在子查询中包含一个AND语句,当它从另一个子查询返回一个结果时,学到了新的东西!因此,我只能返回' SNOMED_CT'的CodeSetID。而不是实际的CodeID为5510009.通过输入

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

然后我能够返回所需的值。

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