求教关于统计检查部位数字符串处理的复杂问题

一品梅 2019-09-21 10:20:59
客户提出统计检查部位数量,部位间用+隔开,比如 腹部+心脏+小器官,这就是3个部位。
然后我给他们写了SQL语句。
Select T_STUDY_REPORT.F_STU_REFER_DOCTOR As 送诊医生,T_STUDY_BASIC.F_STU_DEV_SIGN as 设备型号,Count(T_STUDY_BASIC.F_STU_GUID) As [检查量(人数)],sum(Len(T_STUDY_REPORT.F_STU_BODY_PART)-Len(replace(T_STUDY_REPORT.F_STU_BODY_PART,'+',''))+1) AS 检查部位数,Sum(T_STUDY_STAT.F_STU_FARE) As 费用  From [数据表] Where [日期:T_STUDY_BASIC.F_STU_DATE] and (T_STUDY_BASIC.F_STU_DEV_SIGN like '%磁共振%' or T_STUDY_BASIC.F_STU_DEV_SIGN='MR' ) Group By  T_STUDY_REPORT.F_STU_REFER_DOCTOR,T_STUDY_BASIC.F_STU_DEV_SIGN

但是后来出现了一种情况,让我颇感头疼,就是 男全套(肝+胆+脾+胰+肾)+心脏 这个实际上应该算两个部位,但是男全套里面的用前面的语句就是统计了6个部位,实际上我们需要统计成2个部位。
请问各位大大怎么解决这个问题。拜求!
...全文
201 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2019-10-28
  • 打赏
  • 举报
回复
个人比较懒散,今天比较闲,和客户联系好,要远程改好。括号太多总是出错,最后终于调试结果正确了。
select a.送诊医生,a.设备型号,Count(a.F_STU_GUID) as  [检查量(人数)],sum(Len(a.检查部位)-Len(replace(a.检查部位,'、',''))+1) AS 检查部位数,Sum(a.F_STU_FARE) As 费用 from  (Select T_STUDY_REPORT.F_STU_REFER_DOCTOR As 送诊医生 ,T_STUDY_BASIC.F_STU_DEV_SIGN as 设备型号,T_STUDY_BASIC.F_STU_GUID,case when CHARINDEX('(',T_STUDY_REPORT.F_STU_BODY_PART)>0 then REPLACE(T_STUDY_REPORT.F_STU_BODY_PART,SUBSTRING(T_STUDY_REPORT.F_STU_BODY_PART,
CHARINDEX('(',T_STUDY_REPORT.F_STU_BODY_PART),
CHARINDEX(')',T_STUDY_REPORT.F_STU_BODY_PART)-CHARINDEX('(',T_STUDY_REPORT.F_STU_BODY_PART)+1)
,'') else T_STUDY_REPORT.F_STU_BODY_PART end as 检查部位,T_STUDY_STAT.F_STU_FARE From [数据表] Where [日期:T_STUDY_BASIC.F_STU_DATE] and T_STUDY_BASIC.F_STU_DEV_SIGN like '%CT%') a Group By  a.送诊医生,a.设备型号
心情还比较好,毕竟客户用起来方便了,呵呵。
一品梅 2019-09-21
  • 打赏
  • 举报
回复
数据就类似这种数据,因为数据存储到客户服务器上我拿不到,意思我相信大家已经明白了,就是括号里的分隔符不生效,不统计检查部位个数,在括号外面的按分隔符统计个数
一品梅 2019-09-21
  • 打赏
  • 举报
回复
数据就类似这种数据,因为数据存储到客户服务器上我拿不到,意思我相信大家已经明白了,就是括号里的分隔符不生效,不统计检查部位个数,在括号外面的按分隔符统计个数
二月十六 2019-09-21
  • 打赏
  • 举报
回复
引用 3 楼 一品梅 的回复:
[quote=引用 2 楼 二月十六 的回复:] 是sqlserver数据库吗?给出测试数据和想要的结果。
是SQL server数据库,数据在客户那里,我没有,主要解释的是 比如男全套(肝+胆+脾+胰+肾+泌尿)+心脏,这是两个部位,括号内的尽管有分隔符,但是算一个大部位,不拆分。 如果用我的语句的话,那就是七个部位了,我只要统计成两个部位就可以了。[/quote]随便写一些测试数据就行,这么描述不清楚。这样我只能说你把数据按两部分统计,不能当做多个。
一品梅 2019-09-21
  • 打赏
  • 举报
回复
引用 2 楼 二月十六 的回复:
是sqlserver数据库吗?给出测试数据和想要的结果。
是SQL server数据库,数据在客户那里,我没有,主要解释的是 比如男全套(肝+胆+脾+胰+肾+泌尿)+心脏,这是两个部位,括号内的尽管有分隔符,但是算一个大部位,不拆分。 如果用我的语句的话,那就是七个部位了,我只要统计成两个部位就可以了。
二月十六 2019-09-21
  • 打赏
  • 举报
回复
是sqlserver数据库吗?给出测试数据和想要的结果。
一品梅 2019-09-21
  • 打赏
  • 举报
回复
Select T_STUDY_REPORT.F_STU_REFER_DOCTOR As 送诊医生,T_STUDY_BASIC.F_STU_DEV_SIGN as 设备型号,Count(T_STUDY_BASIC.F_STU_GUID) As [检查量(人数)],sum(Len(T_STUDY_REPORT.F_STU_BODY_PART)-Len(replace(T_STUDY_REPORT.F_STU_BODY_PART,'+',''))+1) AS 检查部位数,Sum(T_STUDY_STAT.F_STU_FARE) As 费用 From [数据表] Where [日期:T_STUDY_BASIC.F_STU_DATE] and (T_STUDY_BASIC.F_STU_DEV_SIGN like '%磁共振%' or T_STUDY_BASIC.F_STU_DEV_SIGN='MR' ) Group By T_STUDY_REPORT.F_STU_REFER_DOCTOR,T_STUDY_BASIC.F_STU_DEV_SIGN 前面排版不好,我直接复制黏贴了。

27,582

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧