再问交叉表????

tflb 2003-11-21 11:35:48
学生(学号,姓名,班级编号)
20030101 王好 200301
20030102 李国 200301
...
课程(课程编号,课程名)
101 数学
102 语文
103 英语
....
成绩(成绩编号,学号,课程编号,成绩,时间)
1 20030101 101 90 2003-09-01
2 20030102 102 95 2003-09-01
3 20030101 102 89 2003-09-01
...
上面是我的数据设计
这样的显示我已经实现了,如下
学号 姓名 数学 语文 英语 .....总分 平均分 时间
20030101 王好 90 85 89 268 88 2003-09-01
20030102 李国 85 95 96 275 90 2003-09-01
select 学号,sum(case 课程 when '数学' then 成绩 else 0 end) as '数学',

sum(case 课程 when '英语' then 成绩 else 0 end) as '英语',

sum(case 课程 when '语文' then 成绩 else 0 end) as '语文',sum(成绩) 总分,avg(成绩) 平均分,max(时间) 时间

from 成绩
group by 学号

是pengdali(大力 V3.0)帮我写的.
现在我想实现
名次 学号 姓名 数学 语文 英语 总分1 平均分1 政治 历史 总分2 时间
1 20030101 王好 90 85 89 268 88 23 35 305 2003-09
2 20030102 李国 85 95 96 275 90 25 28 295 2003-09
主要是,名次和总分1,平均分1,总分2上面已经实现了.
名次按总分2排名
总分1=数学+语文+英语
平均分1=数学+语文+英语/3
总分2=所有科相加
请问这个怎么实现呀!!!
...全文
47 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
pengdali 2003-11-22
  • 打赏
  • 举报
回复
你作成存储过程,在前台调用
tflb 2003-11-21
  • 打赏
  • 举报
回复
这个我没试,我看在数据里实现名次有点麻烦
我还是在.net里实现吧!再次感谢您对我的帮助!
明天早上结贴
祝你好梦!!!!!
pengdali 2003-11-21
  • 打赏
  • 举报
回复
select 学号,sum(case 课程 when '数学' then 成绩 else 0 end) as '数学',

sum(case 课程 when '英语' then 成绩 else 0 end) as '英语',

sum(case 课程 when '语文' then 成绩 else 0 end) as '语文',
sum(case when 课程 in ('数学','语文','英语') then 成绩 else 0 end) 总分1,
sum(成绩) 总分2,avg(成绩) 平均分,max(时间) 时间 into #临时表
from 成绩
group by 学号

select (select count(*)+1 from #临时表 where 总分2<tem.总分2) 名次,* from #临时表 tem

没有错吧
tflb 2003-11-21
  • 打赏
  • 举报
回复
谢谢了.关于你写的名次有问题!aaa是什么意思呀!!
服务器: 消息 207,级别 16,状态 3,行 1
列名 '总分' 无效。
服务器: 消息 8155,级别 16,状态 1,行 1
没有为第 1 列(属于 'tem')指定列。
pengdali 2003-11-21
  • 打赏
  • 举报
回复
这个效率不好,也不知道对不对:
select (select count(*)+1 from (select 1 from 成绩 group by 学号 having sum(成绩)<aaa.总分2) tem) 名次,*

from (
select 学号,sum(case 课程 when '数学' then 成绩 else 0 end) as '数学',

sum(case 课程 when '英语' then 成绩 else 0 end) as '英语',

sum(case 课程 when '语文' then 成绩 else 0 end) as '语文',
sum(case when 课程 in ('数学','语文','英语') then 成绩 else 0 end) 总分1,sum(成绩) 总分2,avg(成绩) 平均分,max(时间) 时间
from 成绩
group by 学号) aaa
pengdali 2003-11-21
  • 打赏
  • 举报
回复
select 学号,sum(case 课程 when '数学' then 成绩 else 0 end) as '数学',

sum(case 课程 when '英语' then 成绩 else 0 end) as '英语',

sum(case 课程 when '语文' then 成绩 else 0 end) as '语文',sum(case when 课程 in ('数学','语文','英语') then 成绩 else 0 end) 总分1,sum(成绩) 总分2,avg(成绩) 平均分,max(时间) 时间 into #临时表
from 成绩
group by 学号

select (select count(*)+1 from #临时表 where 总分2<tem.总分2) 名次,* from #临时表 tem

34,875

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧