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一点也不熟悉。不过我相信其他人可以帮你。