数据库中根据业务表创建了视图,存储有SSRQ1-6、SSJB1-6共12个字段,同时新增了四个字段S1-S4用来存储SSJB1-6中对应数值的计数
业务场景为:
每一条数据表示一个个案,需要统计每个个案中各级别手术的个数
业务需求是:
当SSRQ1-6中任意两个字段有相同值时,取SSJB1-6中数值最大的,在对应的级别下计数+1;
当SSRQ1-6中存在不同值时,每个对应的SJJB都需要取,在对应的级别下计数+1
例如:
28日有二级/三级手术,取三级手术,S3下计数+1;
29日有一级/二级手术,取二级手术,S2下计数+1;
14日有四级手术,S4下计数+1;
汇总后该条个案对应的S1-S4分别为0/1/1/1
求问大神这样用sql语句怎么实现
case when 和decode都试过了
这种复杂的功能,用功能业务实现比较好,sql我看有点复杂
给你个思路,
1.理论上,你这个每行本身应该有个id,假设没有,就先用rownum 替代id。
2.有6个字段表示日期,这6个字段应该可以做行列转换变成一列。
3.手术级别的6个字段,也同样做行列转换变成一列
4.然后用开窗函数,按id加日期分组,取每组数字最大对应的手术级别,得到3列数据
5.distinct 这3个字段,完成