如何用SQL查找未匹配指定诊断码的特定药物医保索赔记录
解决方案:查找使用Drug-X但无H99诊断码的医保索赔
核心逻辑
要实现需求,需要两步筛选:
- 先定位所有使用过Drug-X的索赔记录
- 从这些索赔中排除任何服务行关联了H99诊断码的索赔
推荐SQL写法
方法1:使用NOT EXISTS(高效且逻辑清晰)
假设你的数据分为两张表:
claim_services:存储索赔服务行,包含ClaimID(索赔ID)、DrugCode(药品编码)claim_diagnoses:存储索赔关联的诊断码,包含ClaimID、ICD10Code(ICD10诊断码)
SELECT DISTINCT cs.ClaimID FROM claim_services cs WHERE cs.DrugCode = 'Drug-X' AND NOT EXISTS ( -- 检查当前索赔是否存在H99诊断码 SELECT 1 FROM claim_diagnoses cd WHERE cd.ClaimID = cs.ClaimID AND cd.ICD10Code = 'H99' );
方法2:使用LEFT JOIN + IS NULL
如果更习惯JOIN写法,可以用左连接筛选无匹配的记录:
SELECT DISTINCT cs.ClaimID FROM claim_services cs LEFT JOIN claim_diagnoses cd ON cs.ClaimID = cd.ClaimID AND cd.ICD10Code = 'H99' WHERE cs.DrugCode = 'Drug-X' AND cd.ClaimID IS NULL;
你之前失败的可能原因
- 错误地将诊断码条件与药品条件放在同一行筛选:比如直接在
claim_services中筛选DrugCode='Drug-X' AND ICD10Code!='H99',但诊断码是关联到整个索赔而非单个服务行,这种写法会漏掉索赔内其他服务行有H99的情况。 - 使用
WHERE IN时逻辑反转:比如错误地查询了有H99的索赔ID并尝试排除,但子查询的关联条件写错,导致筛选逻辑失效。
验证示例
对于Claim ID为321的记录:只要它的服务行中存在Drug-X,且claim_diagnoses中没有该ClaimID对应的H99记录,上述两个SQL都会返回321,符合需求。
内容的提问来源于stack exchange,提问作者sqlrobert
相关产品推荐
相关产品推荐

