我有以下情况:
我有一年的账单(例如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"
提前感谢您的帮助。
编辑:添加了更多解释和示例...
答案 0 :(得分:1)
尝试此查询:
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
之前排序。对于年份订单,我们需要一个案例表达式。在这里,我们按年计算未付账单的递增和按付账单递减。