当前位置: 首页 > news >正文

【Mysql】关联查询1对多处理

关联查询1对多返回

遇见的问题

审批主表,和审批明细表,一张审批对应多张明细数据,每条明细数据的状态是不一样的,现在需要根据明细的状态获取到主单子的状态,状态返回矩阵如下

明细状态返回总状态
都是已完成已完成
都是已终止已终止
有进行中进行中
有草稿草稿
只有已完成和已终止已完成

观察报错

问题解决

SELECT vba.object_id,vba.create_time,vba.company_id,vba.approval_no,vba.finish_time,vba.business_table,vba.business_id,t2.enum_status,vba.create_user_name,vba.apply_abstract
FROM view_bus_approval vbaLEFT JOIN view_bus_payment vbp ON vba.object_id = vbp.approval_idLEFT JOIN (SELECT ba.approval_id,CASEWHEN ba.enum_status = '05'AND ba.cnt > 0 THEN'05'WHEN ba.enum_status = '10'AND ba.cnt > 0 THEN'10'WHEN ba.enum_status = '20'AND ba.cnt = ba1.cnt THEN'20'WHEN ba.enum_status = '30'AND ba.cnt = ba1.cnt THEN'30'WHEN ba.enum_status = '40'AND ba.cnt = ba1.cnt THEN'40'ELSE '20'END AS enum_statusFROM (SELECT t2.approval_id,t2.enum_status,sum(cnt) AS cntFROM view_approval_detail_status_cnt t2WHERE t2.approval_user_id = 1GROUP BY t2.approval_id,t2.enum_status) baLEFT JOIN (SELECT t2.approval_id, sum(cnt) AS cntFROM view_approval_detail_status_cnt t2WHERE t2.approval_user_id = 1GROUP BY t2.approval_id) ba1 ON ba1.approval_id = ba.approval_idGROUP BY ba.approval_id) t2 ON t2.approval_id = vba.object_id
WHERE vba.is_deleted = 0AND vba.business_table = 'bus_official_seal_use'
ORDER BY (CASEvba.enum_statusWHEN '05' THEN1WHEN '30' THEN2WHEN '10' THEN3WHEN '40' THEN4WHEN '20' THEN5ELSE 6END) ASC,vba.create_time DESC;

这里用到了两层查询,一遍是查询该申请单子的所有明细的数量

SELECT t2.approval_id, sum(cnt) AS cnt
FROM view_approval_detail_status_cnt t2
WHERE t2.approval_user_id = 1
GROUP BY t2.approval_id

然后外层是查询该单子下再按照状态进行分组求和

SELECT t2.approval_id,t2.enum_status,sum(cnt) AS cnt
FROM view_approval_detail_status_cnt t2
WHERE t2.approval_user_id = 1
GROUP BY t2.approval_id,t2.enum_status

然后拿到的申请单id,再group by这个单子id,因为一个单子只会返回一个状态,就达到效果了。

结语

如果哪位大佬发现了解释的不对的,还望不吝赐教。十分感谢

http://www.lryc.cn/news/147612.html

相关文章:

  • vue 入门案例模版
  • el-select实现懒加载
  • Java泛型机制
  • Linux CentOS安装抓包解包工具Wireshark图形化界面
  • 虹科分享 | 温度边缘效应对冻干成品含水量的影响(下)——优化和总结
  • ATF(TF-A)安全通告 TFV-1 (CVE-2016-10319)
  • 说说我最近筛简历和面试的感受。。
  • Mysql /etc/my.cnf参数详解(一)
  • 用最少数量的箭引爆气球【贪心算法】
  • Matlab论文插图绘制模板第109期—特征渲染的标签气泡散点图
  • 音视频 ffplay命令播放媒体
  • 使用Fiddler模拟网络
  • 【Axure高保真原型】多图表动态切换
  • 笔试题-访问控制修饰符范围
  • 基于飞腾芯片的设计与调试入门指导
  • 了解 HarmonyOS
  • 【校招VIP】产品面试之面试官的真实意图
  • 实现远程访问Linux堡垒机:通过JumpServer系统进行安全的服务器管理
  • Go 1.21新增的 maps 包详解
  • 《向量数据库指南》——腾讯云向量数据库(Tencent Cloud VectorDB) SDK 正式开源
  • Tutorial: Mathmatical Derivation of Backpropagation
  • 如何在 Linux 中设置 SSH 无密码登录
  • 什么时候用增量式PID,什么时候用位置式PID
  • Go语言入门记录:从基础到变量、函数、控制语句、包引用、interface、panic、go协程、Channel、sync下的waitGroup和Once等
  • 位运算进阶操作
  • sql:SQL优化知识点记录(四)
  • Java----Sentinel持久化规则启动
  • Java版工程行业管理系统源码-专业的工程管理软件- 工程项目各模块及其功能点清单
  • 无涯教程-Android - Grid View函数
  • 【第四阶段】kotlin语言的解构语法过滤元素