Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 运行多个子查询_Sql_Subquery_Icd_Snomed Ct - Fatal编程技术网

Sql 运行多个子查询

Sql 运行多个子查询,sql,subquery,icd,snomed-ct,Sql,Subquery,Icd,Snomed Ct,我正在提取表AbsDrgDiagnosis.Diagnosis中的一个代码(ICD9)。当DmsNoMenclatureMapCodes.CodeSetID='SNOMED\u CT'时,我需要提取另一个表DmsNoMenclatureMapCodes.CodeID中的另一个代码(SNOMED\u CT) 然后,链接这两个表的唯一方法是通过AbsDrgDiagnosis.Diagnosis=DMisNomenclatureMapCodes.CodeID,而DMisNomenclatureMapC

我正在提取表AbsDrgDiagnosis.Diagnosis中的一个代码(ICD9)。当DmsNoMenclatureMapCodes.CodeSetID='SNOMED\u CT'时,我需要提取另一个表DmsNoMenclatureMapCodes.CodeID中的另一个代码(SNOMED\u CT)

然后,链接这两个表的唯一方法是通过AbsDrgDiagnosis.Diagnosis=DMisNomenclatureMapCodes.CodeID,而DMisNomenclatureMapCodes.CodeSetID='ICD9'

因此,例如,当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
到目前为止,我只能比较DmsNomenclatureMapCodes.CodeID上的AbsDrgDiagnosis.Diagnosis,两者都等于290.23,但在此之后,我不知道如何获得SNOMED代码。我假设我必须对DMisNomenclatureMapCodes.MisNomenclatureMapID执行另一个子查询以获得分组,然后找到SNOMED\u 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
鉴于此,“那么链接这两个表的唯一方法是通过AbsDrgDiagnosis.Diagnosis=DmsnomencLatureMapCodes.CodeID,当DmsnomencLatureMapCodes.CodeSetID='ICD9'”时,您是否可以更改以下内容:

LEFT JOIN DMisNomenclatureMapCodes
ON DMisNomenclatureMapCodes.CodeID = AbsDrgDiagnoses.Diagnosis
为此:

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

感谢所有对此做出回复的人。事实证明,我必须构建几个子查询来实现我想要的。当两个ICD9代码都通过存在时,最下面的子查询返回命名映射结果

NMC.CodeID = AbsDrgDiagnoses.Diagnosis. 
现在这是我的问题,我不知道当子查询从另一个子查询返回单个结果时,可以在子查询中包含AND语句,学到了一些新的东西!因此,我只能返回'SNOMED_CT'的代码集ID,而不能返回5510009的实际代码集ID。投入

WHERE NMC.CodeSetID = 'SNOMED_CT' AND NMC.MisNomenclatureMapID IN
然后我可以返回所需的值

代码:


谢谢你的回复。如果我将CodeSetID设置为'ICD9',它将返回现在返回的内容。当ABSDRGDIAGNOSIS.Diagnosis有一个数字时,它总是ICD9,当ABSDRGDIAGNOSIS.Diagnosis=DMisNomenclatureMapCodes.CodeID时,它总是“ICD9”。因此,我认为必须要做的是找到ABSDRGDIAGNOSIS.DIAGNOSIA=DMisNomenclatureMapCodes.CodeID之间的匹配,然后根据DMisNomenclatureMapCodes.MisNomenclatureMapID字段,然后获取SNOMED\u CT代码。至少我是这么想的,但我愿意接受任何建议。:)从技术上讲,我不能只执行NMC.CodeID=AbsDrgDiagnoses.Diagnosis的联接,然后对联接执行子查询吗?
,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