sql - 结合两个 JPA Spring 查询 SQL 查询
问题描述
我创建了 2 个自定义 SQL 查询来从我的 PostgreSQL 数据库中获取我的数据。我做了两个小改动的查询。用户 ID 部分。使用 wd.id 它返回所有工作人员报告,但有时我需要获取特定的工作人员报告。有没有办法结合这两个查询?
@Query(value = "SELECT\n" +
"\twd.id as workDetailId,\n" +
" max(ua.name) as name,\n" +
" count(sw.id) as shiftCount,\n" +
" sum(sw.actual_work_duration) as workDuration,\n" +
" sum(sw.actual_shift_duration) as shiftDuration,\n" +
"\twd.salary as salary,\n" +
"\tmax(mi.name) as jobRelation\n" +
"FROM shift_worker sw\n" +
"JOIN user_acc ua ON ua.work_detail_id = sw.work_detail_id\n" +
"JOIN work_detail wd ON sw.work_detail_id = wd.id\n" +
"JOIN maintenance_item mi ON wd.job_relation_id = mi.id\n" +
"WHERE sw.work_detail_id = wd.id AND\n" +
" sw.actual_work_start_time > ?1 AND\n" +
" sw.actual_work_start_time < ?2 AND sw.actual_work_end_time IS NOT NULL\n" +
"GROUP BY wd.id", nativeQuery = true)
Page<UserShiftReport> findUserReports(LocalDateTime startDateTime, LocalDateTime endDateTime, Pageable pageable);
@Query(value = "SELECT\n" +
"\twd.id as workDetailId,\n" +
" max(ua.name) as name,\n" +
" count(sw.id) as shiftCount,\n" +
" sum(sw.actual_work_duration) as workDuration,\n" +
" sum(sw.actual_shift_duration) as shiftDuration,\n" +
"\twd.salary as salary,\n" +
"\tmax(mi.name) as jobRelation\n" +
"FROM shift_worker sw\n" +
"JOIN user_acc ua ON ua.work_detail_id = sw.work_detail_id\n" +
"JOIN work_detail wd ON sw.work_detail_id = wd.id\n" +
"JOIN maintenance_item mi ON wd.job_relation_id = mi.id\n" +
"WHERE sw.work_detail_id = ?1 AND\n" +
" sw.actual_work_start_time > ?2 AND\n" +
" sw.actual_work_start_time < ?3 AND sw.actual_work_end_time IS NOT NULL\n" +
"GROUP BY wd.id", nativeQuery = true)
Page<UserShiftReport> findUserReportByUserId(Long userId, LocalDateTime startDateTime, LocalDateTime endDateTime, Pageable pageable);
解决方案
如果您可以合并保留 userId 参数的两种方法,则在您想要通用结果的地方传递一个 0 userId 并假设没有 userId 等于 0 的数据,您可以将查询组合为 -
Where sw.work_detail_id = case when ?1 = 0 then wd.id else ?1 end
本质上是查询中 where 子句中不同列的“case when”语法使用。
推荐阅读
- angular - TypeError:无法读取空角 6 的属性“邮政编码”
- java - 为什么是数组
kotlin 中主函数的选择参数类型? - php - shell_exec() 在实时服务器中表示出于安全原因禁用
- symfony4 - 具有共同用户群的项目
- cakephp - 从第二次出现开始显示数据
- ios - 如何快速处理位于第一个表格视图单元格下的第二个表格视图的行?
- javascript - 猫鼬模式验证:阻止字符串字段中的某些字符
- alexa-skills-kit - 从 s3 读取数据:s3.getObject 不是函数
- promise - Promise.race 可以使用不必要的内存吗?
- c# - Telerik 具有活动目录的文件资源管理器,如果 AD 允许,用户只能在其中看到共享文件夹