我用的是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怎么写??谢谢了。

解决方案 »

  1.   


    select 班级,sum(decode(欠费,'否',1,0)) as 不欠费,sum(decode(欠费,'否',0,1)) as 欠费
    from Entity
    group by 班级
      

  2.   

    hql中用不了decode,怎么办??
      

  3.   


    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();
      

  4.   


    session.createQuery("select 班级,sum(case when 欠费='否' then 1 end),sum(case when 欠费='' then 1 end)  from "
    + Entity.class.getName() 
    + " as t group by 班级").list();
      

  5.   

    String hql = "select banji,sum(case when shifouqianfei='否' then 1 end),sum(case when shifouqianfei='' then 1 end)  from  Student student group by student.banji";List list_tmp = (List)this.getHibernateTemplate().find(hql);
    这样可以吗?
      

  6.   

    decode函数貌似只有Oracle下能用吧?
    mysql下如下处理:
    SELECT classId, sum(if(qianfei='否',1,0)) as buqianfei, sum(if(qianfei='否',0,1)) as qianfei FROM test t group by classId;
      

  7.   

    hql有时候并不一定满足要求,灵活的运用才行,你在用的时候发现sql比它强就用sql就醒了~~要用hql那就要去看看api了!!
      

  8.   

    select 班级号 , sun(NVL(欠费 ,  0  , 1 )) as 欠费 , sun(NVL(欠费 ,  1  , 0 ))不欠费from  tgroup by 班级号;
      

  9.   


    写错了  把 nvl改成 NVL2
      

  10.   


    select 班级号 , sum(NVL2(欠费 , 0 , 1)) as 欠费 , sum(NVL2(欠费 , 1 , 0)) as 不欠费
    from TABLE_NAME
    group by 班级号; 经过测试 通过了。
      

  11.   

    我也做出来了:
    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;
               }
           });