2010-09-29 32 views
0
select p.Id, sum(inc.Quantity) 
from Products p join Incomes inc 
group by p.Id 
order by sum(inc.Quantity) >0 

此查詢在ORDER BY子句中給出了NHibernate.Hql.Ast.ANTLR.QuerySyntaxException。我想知道是否有可能克服這個錯誤,並通過一些表達式來排序?如何在NHibernate中執行排序ORDER BY表達式

UPDATE
我需要(不管有什麼樣的名稱,價格)按名稱進行排序,價格等產品列表產品數量== 0必須到列表的底部。此外,我需要執行該列表的分頁。

+0

您是否有多個具有相同ID的條目?這將是一種奇怪的身份證...但如果你不這樣做,你爲什麼按這種方式分組? – 2010-09-29 08:52:53

+0

我有JOIN在我的查詢 - 所以在結果集中我有多個行具有相同的編號 – kilonet 2010-09-29 08:58:36

回答

1

需要由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

這是一段時間,因爲我做了任何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 

我不知道這是否會工作,但它是值得一試:)

+0

我不想刪除「> 0」部分因爲我想執行排序THAT布爾標誌(產品可用 - 產品總數數量> 0)。我也嘗試過使用別名 - 他們不工作 – kilonet 2010-09-29 07:50:42

+1

@kilonet:當然,如果按正常數量進行排序,*將根據產品是否有貨進行有效排序:0將在任何正數值之前出現。 – 2010-09-29 08:01:18

+0

仍然,按總和排序(不像布爾表達式)我不能按價格或名稱進行額外的排序,例如 – kilonet 2010-09-29 08:32:25

相關問題