运行多个子查询
Posted
技术标签:
【中文标题】运行多个子查询【英文标题】:Running multiple subqueries 【发布时间】:2014-05-06 19:27:48 【问题描述】:我正在提取表 AbsDrgDiagnosis.Diagnosis 中的一个代码 (ICD9)。当 DMisNomenclatureMapCodes.CodeSetID = 'SNOMED_CT' 时,我需要提取另一个表 DMisNomenclatureMapCodes.CodeID 中的另一个代码(SNOMED_CT)
那么链接这两个表的唯一方法是在 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
【问题讨论】:
【参考方案1】:鉴于此,“那么,当 DMisNomenclatureMapCodes.CodeSetID = 'ICD9' 时,通过 AbsDrgDiagnosis.Diagnosis = DMisNomenclatureMapCodes.CodeID 来链接这两个表的唯一方法是”,难道你不能改变这个吗:
LEFT JOIN DMisNomenclatureMapCodes
ON DMisNomenclatureMapCodes.CodeID = AbsDrgDiagnoses.Diagnosis
到这里:
LEFT JOIN DMisNomenclatureMapCodes
ON DMisNomenclatureMapCodes.CodeID = AbsDrgDiagnoses.Diagnosis
and DMisNomenclatureMapCodes.CodeSetID = 'ICD9'
?
【讨论】:
感谢丹的回复。如果我放置 CodeSetID = 'ICD9' 它将返回它现在返回的内容。当 AbsDrgDiagnoses.Diagnosis 有一个数字时,它总是 ICD9,当 AbsDrgDiagnoses.Diagnosis = DMisNomenclatureMapCodes.CodeID 时,它总是'ICD9'。 所以我认为必须完成的方法是找到 AbsDrgDiagnoses.Diagnosis = DMisNomenclatureMapCodes.CodeID 之间的匹配项,然后根据 DMisNomenclatureMapCodes.MisNomenclatureMapID 字段进行一些搜索,然后获取 SNOMED_CT 代码。至少我是这么想的,但我愿意接受任何建议。 :)【参考方案2】:感谢任何回复此问题的人。事实证明,我必须构建几个子查询才能实现我想要的。当两个 ICD9 代码都通过
出现时,最底部的子查询返回命名图结果NMC.CodeID = AbsDrgDiagnoses.Diagnosis.
现在这是我的问题,我不知道当它从另一个子查询返回单个结果时,您可以在子查询中包含 AND 语句,学到了一些新东西!因此我只能返回 'SNOMED_CT' 的 CodeSetID,而不是 5510009 的实际 CodeID。通过输入
WHERE NMC.CodeSetID = 'SNOMED_CT' AND NMC.MisNomenclatureMapID IN
然后我能够返回所需的值。
代码:
,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
【讨论】:
技术上我不能只做一个 NMC.CodeID = AbsDrgDiagnoses.Diagnosis 的连接,然后对连接做一个子查询吗?以上是关于运行多个子查询的主要内容,如果未能解决你的问题,请参考以下文章