Sql 运行多个子查询
我正在提取表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报告3942005Sql 运行多个子查询,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
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