Использование оператора CASE в выборе HQL

Есть ли способ сделать следующее в HQL:

SELECT 
    case when flag = true then SUM(col1) else SUM(col2)
FROM 
    myTable

Ответ 1

Я думаю, вы можете (3.6, 4.3) [inline edit]... для where-clauses:

"Простой" случай, case ... when ... then ... else ... end и "искомый" случай, case when ... then ... else ... end

Ответ 2

По-видимому, способность сделать это была добавлена ​​в версии 3.0.4 с ограничением, которое вы не можете использовать подвыборки в предложении else.

Ответ 3

См. Hibernate-Forum: https://forum.hibernate.org/viewtopic.php?t=942197

Ответ от команды (Gavin): case поддерживается в предложении where, но не в предложении select в HB3.

И увиден в JIRA с государством "Unresolved".

Ответ 4

Ниже вы можете найти рабочий запрос (hibernate on postgresql), который использует 2 оператора case для замены логического значения соответствующим текстовым представлением.

SELECT CASE ps.open КОГДА ИСТИНА THEN "ОТКРЫТО" еще "ЗАКРЫТО" КОНЕЦ, ДЕЛО ps.full КОГДА ИСТИНА THEN 'FULL' else "FREE" END, ps.availableCapacity FROM ParkingState as ps

Ответ 5

Это пример использования сравнения строк в условии:

ВЫБЕРИТЕ СЛУЧАЙ f.type КОГДА "УДАЛИТЬ"   THEN f.previousLocation   ELSE f.currentLocation END FROM FileOperation f