在HQL中使用CASE语句选择

lom*_*axx 18 nhibernate hibernate hql

有没有办法在HQL中执行以下操作:

SELECT 
    case when flag = true then SUM(col1) else SUM(col2)
FROM 
    myTable
Run Code Online (Sandbox Code Playgroud)

Hen*_*aul 10

我想你可以(3.6,4.3)[联编辑] ...对于那些子句:

"简单"案例case ... when ... then ... else ... end和"搜查"案例,case when ... then ... else ... end

  • 感谢您的回复...不幸的是,这是针对 where 子句而不是 select 语句的。 (2认同)

Hil*_*ell 5

显然,在3.0.4添加了执行此操作的能力,但限制是您不能在else子句中使用子选择.


Rub*_*ben 5

下面您可以找到一个工作查询(postgresql 上的 hibernate),它使用 2 个 case 语句将布尔值替换为相应的文本表示形式。

 SELECT 
 CASE ps.open WHEN true THEN 'OPEN' 
      else 'CLOSED' END,  
 CASE ps.full WHEN true THEN 'FULL' 
      else 'FREE' END,  
 ps.availableCapacity 
 FROM ParkingState as ps

Run Code Online (Sandbox Code Playgroud)


小智 5

参见Hibernate论坛:https//forum.hibernate.org/viewtopic.php?t = 942197

Team(Gavin)的回答:where子句支持大小写,但HB3的select子句不支持大小写。

并在JIRA中以“未解决”状态出现。

  • 您看过哪个JIRA问题?我找到了http://opensource.atlassian.com/projects/hibernate/browse/HHH-467,它已固定为3.0.4。 (3认同)