Как выполнить сортировку выражения ORDER BY в NHibernate - PullRequest
0 голосов
/ 29 сентября 2010
select p.Id, sum(inc.Quantity) 
from Products p join Incomes inc
group by p.Id 
order by sum(inc.Quantity) >0

Этот запрос выдает NHibernate.Hql.Ast.ANTLR.QuerySyntaxException в предложении ORDER BY. Интересно, можно ли преодолеть эту ошибку и выполнить сортировку по какому-либо выражению?

UPDATE
Мне нужно отсортировать список товаров по названию, цене и т. Д. НО товары с количеством == 0 должны идти в конец списка (неважно, какое у него имя, цена). Также мне нужно выполнить подкачку этого списка.

Ответы [ 3 ]

1 голос
/ 30 сентября 2010

Вам нужен синтаксис, который также поддерживается SQL. Это работает:

select p.Id, sum(inc.Quantity) 
from Products p join p.Incomes inc
group by p.Id 
order by case when sum(inc.Quantity) > 0 then 0 else 1 end

Проницательность: почему у ваших сущностей есть имена во множественном числе?

0 голосов
/ 29 сентября 2010

Попробуйте

select p.Id, sum(inc.Quantity) 
from Products p join Incomes inc
group by p.Id 
having sum(inc.Quantity) > 0
order by sum(inc.Quantity)

Сортировка по используется для сортировки. Для фильтрации по агрегированным полям используйте наличие.

См. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-grouping

0 голосов
/ 29 сентября 2010

Прошло много времени с тех пор, как я выполнил NHibernate, но я бы ожидал, что вы по крайней мере захотите удалить бит > 0 порядка:

order by sum(inc.Quantity)

или возможно использовать псевдоним:

select p.Id, sum(inc.Quantity) totalQuantity
from Products p join Incomes inc
group by p.Id 
order by totalQuantity

Не знаю, сработает ли это, но стоит попробовать :)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...