sql需求,求大佬解
检查报告表:
health_report_id , result_value , text_ref
10 0.44 0.0-1.0
11 1.24 0.0-10.0
13 阴性 阴性
14 11.00 0.0-64.0
15 0.20 0.0-1.2
16 6.28 0.0-35.0
17 2.98 0.0-15.2
................
需求 : result_value 没有超出 result_value范围的为阴性 (有些值不是数值直接显示为阴性的也算阴性) 求出检查为阳性的人数
回答
--在参考范围内 为阴性
SELECT
COUNT(*) Total1
FROM [TABLE_NAME]
WHERE SUBSTRING(text_ref,1,1) BETWEEN '0' AND '9' --参考范围为数字
AND (CASE WHEN (
CONVERT(DECIMAL(10,2),result_value)>= CONVERT(DECIMAL(10,2),SUBSTRING(text_ref,0,CHARINDEX('-',text_ref))) --大于低参考值
AND CONVERT(DECIMAL(10,2),result_value)<=CONVERT(DECIMAL(10,2),SUBSTRING(text_ref,CHARINDEX('-',text_ref)+1,LEN(text_ref)))--小于高参考值
)
THEN '阴性' ELSE '阳性' END )
='阴性'
--参考范围为中文 为阴性
SELECT
COUNT(*) Total2
FROM [TABLE_NAME]
WHERE SUBSTRING(text_ref,1,1) NOT BETWEEN '0' AND '9' --参考范围为数字
--[TABLE_NAME]替换为实际的表名称