举个简单的例子:我有个学生成绩表: 有三个字段 学生姓名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语句已经写出来了。但是。返回的列数,不确定。而且要求返回的结果要按一定的顺序排列。
模拟数据如下:
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语句已经写出来了。但是。返回的列数,不确定。而且要求返回的结果要按一定的顺序排列。
sql
</select>
resultClass="table映射类"可以自己定义些属性,可以不存在与数据表中,
前台根据不同的情况提取不同的数据即可
如果真的想通过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
不过这样数据库查询的复杂度比较高。
那说明你的映射实体类属性根本没办法确定嘛,那算啦,你还是改用jdbc实现吧