如何编写SQL查询获取符合(1,2)数据源组合的处方数据计数?
解决方案
没问题,我帮你调整原查询来满足计数需求和datasource的筛选条件,下面是两种可行的写法:
基础实现版本
这个版本直接在你原查询的基础上修改,逻辑清晰易懂:
SELECT COUNT(*) AS record_count FROM DrugPrescription dp WHERE dp.id IN ( SELECT DISTINCT dpe.template FROM [DrugPrescriptionEdition] dpe JOIN PrescriptionDoseDetail pdd ON pdd.prescription = dpe.id WHERE doseEnd_endDate IS NULL AND doseEnd_doseEndType = 1 ) AND dp.datasource IN (1, 2); -- 只统计datasource为1或2的记录
性能优化版本(推荐大数据量场景)
如果你的表数据量比较大,用EXISTS替代IN通常会有更好的查询性能,因为它找到匹配项后就会停止检索,不用全量拉取子查询的结果集:
SELECT COUNT(*) AS record_count FROM DrugPrescription dp WHERE dp.datasource IN (1, 2) AND EXISTS ( SELECT 1 FROM [DrugPrescriptionEdition] dpe JOIN PrescriptionDoseDetail pdd ON pdd.prescription = dpe.id WHERE dpe.template = dp.id AND doseEnd_endDate IS NULL AND doseEnd_doseEndType = 1 );
补充说明
- 这里默认你说的“datasource列包含(1,2)组合”是指
datasource的值为1或者2,如果你的datasource是存储多值的字段(比如逗号分隔的字符串),需要调整筛选逻辑,比如用dp.datasource LIKE '%1%' AND dp.datasource LIKE '%2%'(具体要根据字段的存储格式来调整)。 - 两个写法都保留了你原有的核心逻辑:只统计那些关联到满足
doseEnd_endDate IS NULL且doseEnd_doseEndType=1的DrugPrescriptionEdition和PrescriptionDoseDetail的DrugPrescription记录。
内容的提问来源于stack exchange,提问作者uma
相关产品推荐
相关产品推荐

