我用的是hibernate,要写一句HQL。
要一个数据库,如下:
学生号 班级 欠费
0101 101 否
0102 101
0103 101 否
0104 101 否
0105 101
0201 201 否
0202 201
0203 201
想得到如下集合:
班级 不欠费 欠费
101 3 2
201 1 2请问hql怎么写??谢谢了。
要一个数据库,如下:
学生号 班级 欠费
0101 101 否
0102 101
0103 101 否
0104 101 否
0105 101
0201 201 否
0202 201
0203 201
想得到如下集合:
班级 不欠费 欠费
101 3 2
201 1 2请问hql怎么写??谢谢了。
select 班级,sum(decode(欠费,'否',1,0)) as 不欠费,sum(decode(欠费,'否',0,1)) as 欠费
from Entity
group by 班级
session.createQuery("select sum(case when bl='否' then 1 end),sum(case when bl='' then 1 end) from "
+ Entity.class.getName()
+ " as t group by t.name").list();
session.createQuery("select 班级,sum(case when 欠费='否' then 1 end),sum(case when 欠费='' then 1 end) from "
+ Entity.class.getName()
+ " as t group by 班级").list();
这样可以吗?
mysql下如下处理:
SELECT classId, sum(if(qianfei='否',1,0)) as buqianfei, sum(if(qianfei='否',0,1)) as qianfei FROM test t group by classId;
写错了 把 nvl改成 NVL2
select 班级号 , sum(NVL2(欠费 , 0 , 1)) as 欠费 , sum(NVL2(欠费 , 1 , 0)) as 不欠费
from TABLE_NAME
group by 班级号; 经过测试 通过了。
final String sql = "select banji,sum(case when shifouqianfei='否' then 1 end) as howmanyJiaofei,sum(case when shifouqianfei='' then 1 end) as howmanyMeijiaofei from Student student group by student.banji";
return (List)this.getHibernateTemplate().execute(new HibernateCallback()
{
public Object doInHibernate(Session session)throws HibernateException
{
List list=session.createQuery(sql).list();
return list;
}
});