我试图将一个表中特定金额的总和更新为另一个表中的值,但是当另一个表中不存在特定ID时会出现问题:
hql我看起来像beow:
var session = SessionManager.GetCurrentSession();
var queryString = string.Empty;
queryString += @"update CLiner cl set cl.UnbilledDue =
(select sum(cu.UnbilledAmount) as UnbilledAmount from CUnbilled cu
where cu.AccountNo = cl.AccountNo and cu.FileDate = :fileDate)
where cl.FileDate = :fileDate ";
var query = session.CreateQuery(queryString);
query.SetDateTime("fileDate", new DateTime(2014, 10, 7));
query.ExecuteUpdate();
但是当子表中不存在特定帐户号并且该总和返回为零时,它会给出异常。
我尝试将子查询选择更改为
select isnull(sum(cu.UnbilledAmount),0) as UnbilledAmount
nhibernate hql不支持预期的。所以有一种方法可以在hql select语句中将null转换为零...
答案 0 :(得分:0)
试试这个:
coalesce(sum(cu.UnbilledAccount), 0)
原因:
通常,当您查询SQL查询以防止NULL时,您必须在ISNULL
上应用SELECT
函数,这样:
ISNULL(SELECT sum(...., 0) or COALESCE(SELECT sum(...., 0) (return the same result but COALESCE can applied with more parameter, ISNULL has only two parameters)
但是在HQL中是不可能的,因此您可以使用COALESCE
函数来防止这种行为。