【LEFT JOIN 实战记录】是否纳入市级预算项目概览界面
2017-11-01 11:27
399 查看
【LEFT JOIN 实战记录】统计查询-问题明细指标查询
【LEFT JOIN 实战记录】统计查询-整改事项查询(多表联合查询+多次左连接字典表)
【LEFT JOIN 实战记录】统计查询-按主办处室区县查询纳入分析研判库
【LEFT JOIN 实战记录】是否纳入市级预算项目概览界面
【LEFT JOIN 入门级实践】项目表与组织表与人员表,其中人员存在上下级关系
【LEFT JOIN 入门级实践】MYSQL 简单实现 ORACLE minus 差集函数
如何手动将ORACLE的sql建表语句转换为MYSQL的建表语句
业务说明:
项目表(Project) 、事项表(Problem)、全行业事项表(Industy)
1.项目表(Project)
通过项目类型字段(project_type)分为:一般项目、全行业项目、全行业子项目(与全行业项目存在上下级关系)
2.事项表(Problem)
项目表与事项表存在 一对多的关系,一般项目与全行业子项目的事项均存放在此处
3.全行业事项表(Industy)
全行业项目与全行业事项表也存在一对多的关系
需求改动内容:
之前只需要关联事项表(Problem),查询出其中的事项总数等数据
现在变更为:一般项目与全行业子项目 关联 事项表(Problem)
全行业项目 关联 全行业事项表(Industry)
新需求造成的主要问题:全行业项目,全行业子项目,一般项目 是通过一个字段 project_type 来区分的,如何在改动sql最少或改动代码最少的情况下,实现新的需求。
个人想法:
1.结果拼凑法:原sql不改变,再加入一条sql,先遍历原sql的结果集,取出属于全行业项目的主键,放入新加的sql里,得出另外一个结果集,最后合并结果集。
优点:无脑输出,实现简单 缺点:代码繁琐,效率低
2.通过union函数,1条sql 查出 一般项目关联事项表(problem),另外一条sql查出 全行业项目 关联全行业事项表(industry),两条sql输出同样的结果集,最后通过union合并。
( 暂时还没有想到更好的解决方法,欢迎大佬们补充!!!)
【LEFT JOIN 实战记录】统计查询-整改事项查询(多表联合查询+多次左连接字典表)
【LEFT JOIN 实战记录】统计查询-按主办处室区县查询纳入分析研判库
【LEFT JOIN 实战记录】是否纳入市级预算项目概览界面
【LEFT JOIN 入门级实践】项目表与组织表与人员表,其中人员存在上下级关系
【LEFT JOIN 入门级实践】MYSQL 简单实现 ORACLE minus 差集函数
如何手动将ORACLE的sql建表语句转换为MYSQL的建表语句
业务说明:
项目表(Project) 、事项表(Problem)、全行业事项表(Industy)
1.项目表(Project)
通过项目类型字段(project_type)分为:一般项目、全行业项目、全行业子项目(与全行业项目存在上下级关系)
2.事项表(Problem)
项目表与事项表存在 一对多的关系,一般项目与全行业子项目的事项均存放在此处
3.全行业事项表(Industy)
全行业项目与全行业事项表也存在一对多的关系
--应客户要求使用的国产达梦数据库 --未合并一般事项和全行业事项 select pj.project_uuid as projectUuid, pj.project_name as projectName, count(pb.problem_uuid) as problemNum, --利用case when 进行数据条件过滤 此次使用count(NULL)并非count(0) count ( case when FINALLY_CHECK_STATE>0 then 1 else null end ) cancleNum, --因为偷懒 直接利用case when 嵌套另一个case when ,其实也可以通过 select *, case when xxx as rectifyRatio from (这条sql) --convert(Float,XX)方便得出一个百分比的结果 rectifyRatio case when count(1)=0 then 0 else CONVERT(FLOAT,count( case when FINALLY_CHECK_STATE >0 then 1 else null end))/CONVERT(FLOAT,count(1)) end as rectifyRatio, count ( case when pb.budget=1 then 1 else null end ) budgetNum from cqrectify.problem pb right join cqrectify.project pj on pb.project_uuid =pj.project_uuid where --展示出一般项目与全行业项目(全行业子项目展示是通过点击图中小模块,ajax调用另外一条sql,并将结果拼接在对应全行业项目下方) pj.project_type != 2 group by pj.project_uuid, pj.project_nam
需求改动内容:
之前只需要关联事项表(Problem),查询出其中的事项总数等数据
现在变更为:一般项目与全行业子项目 关联 事项表(Problem)
全行业项目 关联 全行业事项表(Industry)
新需求造成的主要问题:全行业项目,全行业子项目,一般项目 是通过一个字段 project_type 来区分的,如何在改动sql最少或改动代码最少的情况下,实现新的需求。
个人想法:
1.结果拼凑法:原sql不改变,再加入一条sql,先遍历原sql的结果集,取出属于全行业项目的主键,放入新加的sql里,得出另外一个结果集,最后合并结果集。
优点:无脑输出,实现简单 缺点:代码繁琐,效率低
2.通过union函数,1条sql 查出 一般项目关联事项表(problem),另外一条sql查出 全行业项目 关联全行业事项表(industry),两条sql输出同样的结果集,最后通过union合并。
( 暂时还没有想到更好的解决方法,欢迎大佬们补充!!!)
--合并以后 select pj.project_uuid as projectUuid, pj.project_name as projectName, count(pb.problem_uuid) as problemNum, count ( case when FINALLY_CHECK_STATE>0 then 1 else null end ) cancleNum, case when count(1)=0 then 0 else CONVERT(FLOAT,count( case when FINALLY_CHECK_STATE >0 then 1 else null end))/CONVERT(FLOAT,count(1)) end as rectifyRatio from cqrectify.problem pb right join cqrectify.project pj on pb.project_uuid =pj.project_uuid where pj.project_type ==0 group by pj.project_uuid, pj.project_name union select pj.project_uuid as projectUuid, pj.project_name as projectName, count(pb.industry_uuid) as problemNum, count ( case when RECTIFY_STATE>0 then 1 else null end ) cancleNum, case when count(1)=0 then 0 else CONVERT(FLOAT,count( case when RECTIFY_STATE >0 then 1 else null end))/CONVERT(FLOAT,count(1)) end as rectifyRatio from cqrectify.industry pb right join cqrectify.project pj on pb.project_uuid =pj.project_uuid where pj.project_type = 1 group by pj.project_uuid, pj.project_name
相关文章推荐
- 【LEFT JOIN 实战记录】统计查询-按主办处室区县查询纳入分析研判库
- MVVM项目实战之路-搭建一个登录界面
- Vue-cli3项目配置Vue.config.js实战记录
- 项目经验谈---IM新消息界面刷新异常处理记录
- 【电信计费系统项目实战】基础篇---登录界面实现
- Android项目实战--手机卫士01--启动界面 -
- python数据分析与挖掘项目实战记录
- [thinkPHP5项目实战_13]新增文章界面附件上传
- 【项目实战】---使用ajax完毕username是否存在异步校验
- MVVM项目实战之路-搭建一个登录界面
- iOS - RxSwift 项目实战记录
- React Native商城项目实战08 - 设置“More”界面cell
- 24讲项目实战:后台登录界面更换、站点栏目分类
- [thinkPHP5项目实战_18]友情链接界面搭建和数据添加
- swift项目实战--微博的未登录界面的实现,和监听未登录界面两个按钮的两种实现方法
- Android项目实战--手机卫士01--启动界面
- MVVM项目实战之路-搭建一个登录界面
- 架构之路--实战项目记录(二) 忘记数据库 开始抽象
- mysql+C#实战七:从界面输入记录
- React Native商城项目实战07 - 设置“More”界面导航条