【问题标题】:HQL order by caseHQL 按案例排序
【发布时间】:2014-10-07 11:25:32
【问题描述】:

我有一个实体:

class User{
    Long id;
    String group_name;
    User head;        
}

我必须按顺序获得已订购的用户: 按 group_name 排序,如果 user 是 head 则优先(head 表示 head.id = id)。

我进行 HQL 查询:select u from User u order by u.group_name, case when u = head then 0 else 1; 但它不起作用;

结果我想要: (组名:用户)

  1. g1 约翰(头)
  2. g1 詹姆斯
  3. g1 亚当
  4. g2 布赖恩(头部)
  5. g2 马丁

如何进行正确的 HQL 查询?

【问题讨论】:

标签: java hibernate hql


【解决方案1】:

这里是 HQL 查询:

"select u.group_name from User u, User.head head where head.id=u.id order by u.group_name"

由于 User 类中没有列名,因此我没有从 User 那里得到您想要的确切内容,因此您可以将其包含在选择部分中。

【讨论】:

  • 抱歉,我有一个按组名排序的列表
  • 你的情况,我只有头部用户,但我也不想成为头部用户
  • "select u.group_name from User u left join User.head head where head.id=u.id order by u.group_name" - 使用这个..它是左连接,它会给你头部用户和非头部用户也是如此。但这就像选择整个用户表本身一样。
  • 我想把用户放在第一位!!!请参阅我的帖子中的示例。 g1 约翰(头)头在第一个位置。
【解决方案2】:

我会在不分组的情况下执行此操作,方法是使用 case 语句创建第二个属性,您可以订购该属性以确定某人是否是组长。例如:

select name,group_name,case when head.id is not null then 1 else 0 end as h 
from User 
order by group_name asc,h desc

如您所见,我使用 case 语句创建了一个属性 h,当某人是组长时它取值为 1,否则取值为 0。然后您可以按降序排序,这意味着每个组的负责人都排在该组的其他成员之前。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-24
    • 1970-01-01
    • 1970-01-01
    • 2015-10-02
    相关资源
    最近更新 更多