Java 对于使用case语句分配优先级的每个类别,选择具有最大优先级的行
考虑下表 指定MPPOSMAPID、empName、指定、部门、职务描述、指定日期 指定可以是初级、高级和主任,部门可以是多个部门之一。 如果未提及部门,则表示该人员持有所有部门的指定名称 每个部门可以有多个人担任相同的角色。此外,一个人可以在每个部门担任多个角色 样本数据Java 对于使用case语句分配优先级的每个类别,选择具有最大优先级的行,java,mysql,database,hibernate,Java,Mysql,Database,Hibernate,考虑下表 指定MPPOSMAPID、empName、指定、部门、职务描述、指定日期 指定可以是初级、高级和主任,部门可以是多个部门之一。 如果未提及部门,则表示该人员持有所有部门的指定名称 每个部门可以有多个人担任相同的角色。此外,一个人可以在每个部门担任多个角色 样本数据 empPosId| empName | designation | department | desc | date --------|---------|-------------|------------|------
empPosId| empName | designation | department | desc | date
--------|---------|-------------|------------|-------|-------------
1 | per1 | DIRECTOR | dept1 | blah1 | 2015-12-23
2 | per1 | SENIOR | (NULL) | blah1 | 2015-12-23
3 | per1 | JUNIOR | dept2 | blah1 | 2015-12-23
4 | per2 | SENIOR | dept1 | blah1 | 2015-12-23
5 | per2 | JUNIOR | (NULL) | blah1 | 2015-12-23
6 | per3 | DIRECTOR | (NULL) | blah1 | 2015-12-23
7 | per4 | JUNIOR | dept2 | blah1 | 2015-12-23
任命级别为初级<高级<董事
此外,特定于部门的角色将覆盖整个角色。也就是说,per1的总体角色是高级主管,但他是部门1的主管,因此wrt部门1 per1将担任主管
我需要一个查询,以获取给定部门中每个人所持有的最高职务的详细信息
例如,对于dept1
empPosId| empName | designation | department | desc | date
--------|---------|-------------|------------|-------|-------------
1 | per1 | DIRECTOR | dept1 | blah1 | 2015-12-23
4 | per2 | SENIOR | dept1 | blah1 | 2015-12-23
6 | per3 | DIRECTOR | (NULL) | blah1 | 2015-12-23
同样,对于dept2
empPosId| empName | designation | department | desc | date
--------|---------|-------------|------------|-------|-----------
2 | per1 | SENIOR | (NULL) | blah1 | 2015-12-23
5 | per2 | JUNIOR | (NULL) | blah1 | 2015-12-23
6 | per3 | DIRECTOR | (NULL) | blah1 | 2015-12-23
7 | per4 | JUNIOR | dept2 | blah1 | 2015-12-23
我有一个工作查询,它使用case语句通过分配数字并选择获得最高数字的行来确定最高指定。
问题是它太大了,我需要简化它并在hibernate中使用它:|
假设deptInput是用户感兴趣的部门
从empPosId所在的名称中选择*
从中选择一个.empPosId
选择*,大小写
当部门=那么4
当部门为空且名称=主管时,则为3
当部门为空且名称=高级时,则为2
当部门为空且名称=初级时,则为1
否则0将作为优先级结束
从名称d开始,部门为空或部门=
a其中优先级=
选择最大大小写
当部门=那么4
当部门为空且名称=主管时,则为3
当部门为空且名称=高级时,则为2
当部门为空且名称=初级时,则为1
其他0结束
来自名称d,其中empName=a.empName按empName分组
无法修改表结构
任何人都可以帮助简化查询,因为我需要使用它从Java进行查询。或者在hibernate中有没有更简单的方法来做同样的事情 仅供参考:FROM子句中的Sub select语句不受支持,只有一些ORM框架(如体面版本中的EclipseLink)具有专有功能。到目前为止,Hibernate没有JPA标准,也不是JPA标准。Hibernate不会让事情变得更简单。它只是使SQL更适合于面向对象的框架。我相信Hibernate的人会告诉您首先进行面向对象的设计,然后围绕这个设计构建表模式。因为这对你来说是不可能的,我不会浪费时间寻找Hibernate解决方案。如果你必须从Java调用它,你能把它变成一个存储过程,优化它吗,并使用CallableStatement调用它?仅供参考:FROM子句中的子select语句不受支持,只有一些ORM框架(如EclipseLink)在体面的版本中具有专有功能。到目前为止,Hibernate没有JPA标准,也不是JPA标准。Hibernate不会让事情变得更简单。它只是使SQL更适合于面向对象的框架。我相信Hibernate的人会告诉您首先进行面向对象的设计,然后围绕这个设计构建表模式。因为这对你来说是不可能的,所以我不会浪费时间寻找Hibernate解决方案。如果你必须从Java调用它,你能把它变成一个存储过程,优化它,并使用CallableStatement调用它吗?