表如下:
table class
id name 学科 成绩
01 张三 语文 110
02 张三 数学 98
03 张三 英语 120
04 张三 物理 85
05 张三 化学 75
06 张三 生物 55
07 张三 政治 89
. . . .
. . . .
. . . .
nn 张三 xx yy
nn1 李四 语文 120
nn2 李四 数学 112
nn3 李四 英语 98
nn4 李四 物理 82
. . . .
. . . .
. . . .
nnn 李四 xx yy
要得到如下结果!
name 语文 数学 英语 物理 化学 生物 政治 ......xx
张三 110 98 120 85 75 55 89 ......yy
李四 120 112 98 82 ........................yy
如果只有几列,可以用自连接,但科目有很多,且不确定!
table class
id name 学科 成绩
01 张三 语文 110
02 张三 数学 98
03 张三 英语 120
04 张三 物理 85
05 张三 化学 75
06 张三 生物 55
07 张三 政治 89
. . . .
. . . .
. . . .
nn 张三 xx yy
nn1 李四 语文 120
nn2 李四 数学 112
nn3 李四 英语 98
nn4 李四 物理 82
. . . .
. . . .
. . . .
nnn 李四 xx yy
要得到如下结果!
name 语文 数学 英语 物理 化学 生物 政治 ......xx
张三 110 98 120 85 75 55 89 ......yy
李四 120 112 98 82 ........................yy
如果只有几列,可以用自连接,但科目有很多,且不确定!
解决方案 »
- 如何通过按钮实现打开文件对话框?
- 怎样很好的注销用户?
- IllegalStateException异常 ???大虾们指教下
- java.sql.SQLException: No suitable driver 错误
- "select * from table where column = '' and ... "。这句话怎么用java实现查找等号后面引号中的内容?
- 近来看看,或许是个机会
- 网上考试系统
- 问题:jsp如何连接sql 2000数据库,如何对连接进行配置呢?
- jsp用户登陆的小问题。初学请给位高手指点。给分!!!在线等待!!!
- 我也想学习JSP,好学吗?有分
- JSP页面调用外部样式不显示
- 关于Struts action之间redirect跳转,数据传递的问题
2:SELECT DISTINCT c.ID,
(SELECT /*+INDEX(FED ENDDT_P)*/
MAX (DECODE (a.学科, '语文', a.成绩, '0'))
FROM CLASS a
GROUP BY a.学科) AS 语文把1中的LIST循环,取得结果来替换里面的语文.
FROM CLASS c
有没办法一条sql完成呢?
请大家多多提出,自己的看法!
1:先查询 class 表中有多少个学科,得到一个List; 2:StringBuffer sql =new StringBuffer("SELECT DISTINCT c.ID, ");
for(int i=0;list!=null&&i<List.size();i++){
sql.append(" (SELECT MAX (DECODE (a.学科, ').append((String)list.get(i)).append(", a.成绩, '0')) FROM CLASS a GROUP BY a.学科) AS ").append((String)list.get(i)).append(", ");
}
sql = new StringBuffer(sql.subString(0,sql.length-1)); sql.append("FROM CLASS c");
你不能让一个客户在那里等很长时间吧!
答案是这样的!name 语文 数学 英语 物理 化学 生物 政治 ......xx
张三 110 98 120 85 75 55 89 ......yy
李四 120 112 98 82 ..........................yy
.....................................................yy
.....................................................yy不是一条一条查的!
不能加入java c c++ .......等语言
也不希望用存储过程来完成。
如有知道的请不要保留!
2 2005001 数学 90.0
3 2005001 英语 80.0
4 2005002 语文 56.0
5 2005002 数学 69.0
6 2005002 英语 89.0declare @sql varchar(8000)
set @sql='select sid'
select @sql=@sql+','+course.name+'=isnull(sum(case course when '''+course.name+''' then result end),0)'
from course order by id
set @sql=@sql+' from result group by sid order by sid'
print @sql
exec(@sql)得出结果sid 语文 数学 英语 2005001 80.0 90.0 80.0
2005002 56.0 69.0 89.0
新闻来自: 新客网(www.xker.com) 详文参考:http://www.xker.com/page/e2007/0205/22415.html
1)查询出所有学科保存到一List
select distinct 学科 from yourtable2)查询出所有人员成绩
select name,学科,成绩 from yourtable3)遍历2)输出while(rst.next()){
if(!rst.getString("name").equals(sName)||rst.last()){
writeRow(lsHeader,mapRow);
sName=rst.getString("name");
mapRow.clear();
} mapRow.put(
sName+"_"+rst.getString("学科"),
rst.getString("name")
);
}上一个项目就是这样实现行专列的
mapRow.put(
sName+"_"+rst.getString("学科"),
rst.getString("成绩")
);