Java 在一列中按两次排序

Java 在一列中按两次排序,java,sql,oracle,hibernate,sorting,Java,Sql,Oracle,Hibernate,Sorting,假设我们有这样一个名称表: PERSON_ID PART_TYPE VALUE 而PERSON\u ID是对PERSON的外键引用 内部的零件类型将是类似系列,给定,前缀,后缀等值。值自然会是实际值 您将如何编写SQL查询(更不用说Hibernate)来按部分类型排序,然后是系列部分类型的值,然后是给定的部分类型的值 考虑这样一个场景,您有以下三个人: Given3 Family10 Given5 Family10 Given7 Family10 使用此SQL: SELECT thi

假设我们有这样一个名称表:

PERSON_ID   PART_TYPE   VALUE
PERSON\u ID
是对
PERSON
的外键引用

内部的
零件类型
将是类似
系列
给定
前缀
后缀
等值。值自然会是实际值

您将如何编写SQL查询(更不用说Hibernate)来按
部分类型
排序,然后是
系列
部分类型的
,然后是给定的
部分类型

考虑这样一个场景,您有以下三个人:

Given3 Family10
Given5 Family10
Given7 Family10
使用此SQL:

SELECT this_.person_id, name1_.part_type, name1_.value
FROM person this_
LEFT OUTER JOIN name name1_
ON this_.person_id       =name1_.person_id
ORDER BY (
  CASE
    WHEN name1_.PART_TYPE = 'FAMILY'
    THEN 0
    WHEN name1_.PART_TYPE = 'GIVEN'
    THEN 1
  END),
  name1_.VALUE,
我得到:

  ID2  FAM Family10
  ID1  FAM Family10
  ID3  FAM Family10
  ID4  GIV Given3
  ID5  GIV Given5
  ID6  GIV Given7
我想:

ID1  FAM Family10
      ID2  FAM Family10
      ID3  FAM Family10
      ID4  GIV Given3
      ID5  GIV Given5
      ID6  GIV Given7
所以,当前状态下这些家族10行的顺序是不确定的——它可以是ID1、ID2和ID3的任意组合。我希望它们按照给定的值排序。我真的不知道如何做到这一点,即使有多个select语句


我之所以要这样做,是因为我想获得这些人员ID,我可以在我的终端上进行一些过滤,以获得不同的人员ID,并对其执行一些分页逻辑,然后实际加载人员(从而减少大量SQL调用)。此时我无法更改数据库模式。

这与您要求的有点不同,但可能会有所帮助-它会给出每个人的家庭和名字

SELECT this_.person_id, family.value as family, given.value as given
FROM person this_
LEFT OUTER JOIN name family
    ON this_.person_id = family.person_id
    and family.PART_TYPE = 'FAMILY'
LEFT OUTER JOIN name given_
    ON this_.person_id = given.person_id
    and given.PART_TYPE = 'GIVEN'
ORDER BY family.value, given.value

如果有人能想出更好的方式来描述标题行,他们可以随意编辑标题行。我一直在努力解决这个问题。你能举一个期望输出的例子吗?你现在的订单是多少?也许我看错了,但我有点confused@dweiss我加了一个我想要的例子。这还清楚吗?我还更改了ID以减少混淆。不过,我在发布的SQL代码片段中确实有ORDERBY子句,这看起来是正确的。哇,你真棒!我会接受的。你知道如何在Hibernate中实现这一点吗?对不起,我对Hibernate一点也不熟悉。不过我相信其他人可以帮你。