【问题标题】:HQL custom order ASC and DESCHQL 自定义订单 ASC 和 DESC
【发布时间】:2018-01-26 09:27:32
【问题描述】:

我有以下情况:

我有一张带有年份的账单(例如 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"

提前感谢您的帮助。

编辑:添加更多解释和示例...

【问题讨论】:

    标签: sql-order-by hql


    【解决方案1】:

    试试这个查询:

    from Bill as b
    order by
        b.paid,
        case when b.paid = 'false' then b.year else -b.year end,
        b.name
    

    首先将未付账单记录放在已付记录之前。对于第一个排序条件,我们不需要使用 case 表达式,因为 falsetrue 之前排序。对于年份顺序,我们确实需要一个 case 表达式。在这里,我们按年份对未付账单进行升序排序,对已付账单按降序排序。

    【讨论】:

    • 你确定吗?我的结果说明了其他内容。请查看我提供的新信息。
    • 这完全符合我的需要。非常感谢!
    猜你喜欢
    • 2019-08-28
    • 1970-01-01
    • 2017-12-17
    • 2015-11-26
    • 1970-01-01
    • 2018-09-29
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多