HQL 自定义订单 ASC 和 DESC
HQL custom order ASC and DESC
我有以下情况:
我有一张带有年份的账单(例如 2000 年、2001 年……),一个表示账单是否已支付的布尔值以及不同的其他值,例如人名。
我想按特定的顺序在列表中显示它们。最早的未付账单应该在最上面,最早的已付账单应该在底部。它也应该按名称排序。
喜欢:
Name Year PAID
Smith 2010 false
Otto 2018 false
Anon 2018 true
Hueue 2018 true
Otto 2017 true
Smith 2009 true
类似的东西...
"from Bill as b order by b.paid, b.year, b.name"
此子句将列表排序为:
Name Year PAID
Smith 2010 false
Otto 2018 false
Smith 2009 true
Otto 2017 true
Anon 2018 true
Hueue 2018 true
我尝试使用 HQL 实现我的目标(按案例排序...),但我不知道如何根据值以不同方式对同一行进行排序。
喜欢:(这不起作用)
" from Bill as b" +
" order by" +
" b.paid," +
" (case b.year" +
" WHEN b.paid" +
" THEN b.year" +
" ELSE -b.year" +
" end)," +
" b.name"
提前感谢您的帮助。
编辑:添加了更多解释和示例...
试试这个查询:
from Bill as b
order by
b.paid,
case when b.paid = 'false' then b.year else -b.year end,
b.name
这是通过首先将未付帐单记录放在已付记录之前来实现的。对于第一个排序条件,我们不需要使用 case 表达式,因为 false
在 true
之前排序。对于年份顺序,我们确实需要一个 case 表达式。在这里,我们对未付账单按年份升序排序,对已付账单按年份降序排序。
我有以下情况:
我有一张带有年份的账单(例如 2000 年、2001 年……),一个表示账单是否已支付的布尔值以及不同的其他值,例如人名。
我想按特定的顺序在列表中显示它们。最早的未付账单应该在最上面,最早的已付账单应该在底部。它也应该按名称排序。 喜欢:
Name Year PAID
Smith 2010 false
Otto 2018 false
Anon 2018 true
Hueue 2018 true
Otto 2017 true
Smith 2009 true
类似的东西...
"from Bill as b order by b.paid, b.year, b.name"
此子句将列表排序为:
Name Year PAID
Smith 2010 false
Otto 2018 false
Smith 2009 true
Otto 2017 true
Anon 2018 true
Hueue 2018 true
我尝试使用 HQL 实现我的目标(按案例排序...),但我不知道如何根据值以不同方式对同一行进行排序。 喜欢:(这不起作用)
" from Bill as b" +
" order by" +
" b.paid," +
" (case b.year" +
" WHEN b.paid" +
" THEN b.year" +
" ELSE -b.year" +
" end)," +
" b.name"
提前感谢您的帮助。
编辑:添加了更多解释和示例...
试试这个查询:
from Bill as b
order by
b.paid,
case when b.paid = 'false' then b.year else -b.year end,
b.name
这是通过首先将未付帐单记录放在已付记录之前来实现的。对于第一个排序条件,我们不需要使用 case 表达式,因为 false
在 true
之前排序。对于年份顺序,我们确实需要一个 case 表达式。在这里,我们对未付账单按年份升序排序,对已付账单按年份降序排序。