首页 新闻 会员 周边 捐助

sql需求,求大佬解

0
悬赏园豆:50 [已解决问题] 解决于 2022-01-13 19:03

检查报告表:
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范围的为阴性 (有些值不是数值直接显示为阴性的也算阴性) 求出检查为阳性的人数

dudud的主页 dudud | 初学一级 | 园豆:115
提问于:2021-08-24 16:06
< >
分享
最佳答案
0

--在参考范围内 为阴性
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]替换为实际的表名称

收获园豆:50
soulsjie | 菜鸟二级 |园豆:277 | 2021-10-09 18:08
其他回答(7)
0

result_value是字符串?
select count(*) from TableName where cast(result_value as DECIMAL(18,2)) <数值

result_value最好设置只能存放数值,应该修改代码,不能存字符的内容。。

为乐而来 | 园豆:1432 (小虾三级) | 2021-08-24 16:21

是字符串这是生产环境的没法改

支持(0) 反对(0) dudud | 园豆:115 (初学一级) | 2021-08-24 16:31

@独孤求败、横行江湖: 这种设计不合理,应该再加一个字段专门只能存数字,这个老的数据就不管了,以后新的数字只能存在新的字段里

支持(0) 反对(0) 为乐而来 | 园豆:1432 (小虾三级) | 2021-08-25 14:10
0
快乐的欧阳天美1114 | 园豆:4010 (老鸟四级) | 2021-08-24 16:22

mysql> select (case when age > 0 then 'yang' else 'yin' end) as text_ref from user;
+----------+
| text_ref |
+----------+
| yin |
| yin |
| yin |
| yin |
| yang |
+----------+
5 rows in set (0.00 sec)

加了 as

支持(0) 反对(0) 快乐的欧阳天美1114 | 园豆:4010 (老鸟四级) | 2021-08-24 16:23
0

没想出sql怎么写,
但是能提个思路,把text_ref 0.0-1.0 拆成两个字段,text_ref_min 0.0,text_ref_max 1.0,

查询的时候用 if 判断值是否在text_ref_min,text_ref_max两个字段之间,如还要查出范围的话,这两个字段拼接展示

阅尽三千 | 园豆:332 (菜鸟二级) | 2021-08-24 16:36

主要是这俩字段都是string类型有的是文字,有的是文字加数值

支持(0) 反对(0) dudud | 园豆:115 (初学一级) | 2021-08-24 19:37
0

需要sql帮写q3303670645

Biuget-Golang | 园豆:784 (小虾三级) | 2021-09-02 11:45
0

不会只能用sql吧,用其他语言很好解决,程序是什么语言

刘韬 | 园豆:0 (初学一级) | 2021-09-18 18:04
0

试用split切割

dudud | 园豆:115 (初学一级) | 2021-09-24 17:47
0

mysql版本:

SELECT
-- health_report_id,
-- result_value,
-- text_ref
count(1)
FROM
(
SELECT
health_report_id,
result_value,
text_ref,
LEFT ( text_ref, LOCATE( '-', text_ref ) - 1 ) AS left_str,
substring( text_ref, LOCATE( '-', text_ref ) + 1 ) AS right_str
FROM
test_table
WHERE
result_value != '阴性'
) t1
WHERE
CONVERT ( t1.result_value, DECIMAL ) < CONVERT ( t1.left_str, DECIMAL ) OR CONVERT ( t1.result_value, DECIMAL ) > CONVERT ( t1.right_str, DECIMAL );

素手揽清风 | 园豆:229 (菜鸟二级) | 2021-10-15 18:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册