举个简单的例子:我有个学生成绩表: 有三个字段 学生姓名studentname、课程名称coursename、成绩grade
模拟数据如下:
studentname coursename grade
张三 math 90
张三 english 30
张三 china 89
李四 math 98
李四 english 90
李四 china 87需求是这样的:如果用户想要查询学生的英语、数学成绩。
那么返回的结果应该这样:
studentname math english
张三 90 30
李四 98 90
-------------------------------
如果想要查询学生的数学、英语、中文的成绩,则studentname math english china
张三 90 30 89
李四 98 90 87-------------------------------
现在我的sql语句已经写出来了。但是。返回的列数,不确定。而且要求返回的结果要按一定的顺序排列。

解决方案 »

  1.   

    <select paramterClass="参数类" resultClass="table映射类">
    sql
    </select>
    resultClass="table映射类"可以自己定义些属性,可以不存在与数据表中,
    前台根据不同的情况提取不同的数据即可
      

  2.   

    根据你的列名studentname math english china 最多的,比如还有computer等等,最大化一个包含所有属性的类,然后在加个seq(long啥的)表示顺序,然后修改sql,加上一个seq的伪列表示顺序,映射到这个类。前台需要的属性,sql中肯定映射到类了,直接拿就是了。
      

  3.   

    其实这个把数据取出来在后台用程序做能相对简单些。
    如果真的想通过sql实现的话,可以参考下面这个。
    select distinct 
    st.studentname
    <isEqual prepend="," name="" compareValue="english">
    (select s.grade from student s where s.studentname=st.studentname s.coursename='math') as math
    </isEqual>
    <isEqual prepend="," name="" compareValue="english">
    (select s.grade from student s where s.studentname=st.studentname s.coursename='english') as english
    </isEqual>
    <isEqual prepend="," name="" compareValue="china">
    (select s.grade from student s where s.studentname=st.studentname s.coursename='china') as china 
    </isEqual>
    from student st
    不过这样数据库查询的复杂度比较高。
      

  4.   

    对于3楼的解决方法,我也考虑过。但是很难实现。因为。math、english、china 课程信息是来源于另外一个基本信息表(课程信息表),该表有多少记录根本不能确定。没办法确定bean的属性。
      

  5.   

    math、english、china 课程信息是来源于另外一个基本信息表(课程信息表),该表有多少记录根本不能确定?
    那说明你的映射实体类属性根本没办法确定嘛,那算啦,你还是改用jdbc实现吧