langxiashahai 2010-09-09 18:56
浏览 272
已采纳

hibernate中使用case when count sum 查询sql 出错

[code="java"]
StringBuilder sb = new StringBuilder(
"select obj.eid, obj.employee.ename, obj.employee.enumber, count(obj.isBeLate) as 迟到次数, count(case when obj.lateReson='迟到' then obj.lateReson end) as 迟到");
sb
.append(",count(case when obj.lateReson='旷工' then obj.lateReson end) as 旷工,");
sb
.append("count(case when obj.lateReson='病假' then obj.lateReson end) as 病假,");
sb
.append("count(case when obj.lateReson='事假' then obj.lateReson end) as 事假,");
sb
.append("count(case when obj.lateReson='丧假' then obj.lateReson end) as 丧假,");
sb
.append("count(case when obj.lateReson='婚假' then obj.lateReson end) as 婚假,");
sb
.append("count(case when obj.lateReson='产假' then obj.lateReson end) as 产假,");
sb
.append("count(case when obj.lateReson='公假' then obj.lateReson end) as 公假,");
sb
.append("count(case when obj.lateReson='年假' then obj.lateReson end) as 年假,");
sb.append("sum(points) as 扣分,");
sb.append("sum(fine) as 罚金 ");
sb.append(" from Attendance obj where month(obj.modifyTime) =");
sb
.append("datepart(mm,getdate()) and obj.isBeLate = '是' group by obj.eid, obj.employee.ename, obj.employee.enumber");
getSession().createQuery(sb.toString()).list();
[/code]

上面的代码就不解释了, Attendance employee 两个对象一对多关联关系。

[code="java"]



[/code]
[code="java"]




[/code]

此sql无法执行,但是在sql中是可以正确执行的,求解。。。。

  • 写回答

1条回答 默认 最新

  • lizhiyezi 2010-09-10 16:22
    关注

    hibernate 不支持 count + case,改成 sum +case即可

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?