导航
  • 主页
  • 基础类
  • 应用实例
  • 新技术前沿

如何有sql语句实现下面功能,关于交叉表!!

tflb 2003-12-08 11:32:21
学生(学号,姓名,班级编号)
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
...
班级(班级编号,年部编号)
200501 7
200503 7
....
上面是我的数据设计
这样的显示我已经实现了,如下

名次 学号 姓名 数学 语文 英语 总分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
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,
avg(case when 课程 in ('代数','语文','英语') then 成绩 else 0 end)
平均分1,sum(成绩) 总分2,max(时间) 时间
from 成绩 c,学生 x,班级 b
group by x.学号,c.姓名

现在我想实现
名次 学号 姓名 数学 语文 英语 总分1 平均分1 与班平均分差 与年部平均分差劲政治 历史 总分2 时间
1 20030101 王好 90 85 89 268 88 1 -4 23 35 305 2003-09
2 20030102 李国 85 95 96 275 90 3 -2 25 28 295 2003-09

主要是,与班平均分差,与年部平均分差
班平均分=avg(数学+语文+英语) where 班级编号=所对应的班级编号
年部平均分=avg(数学+语文+英语) where 年部编号=所对就的年部编号
与班平均分差=平均分1-班平均分
与年部平均分差=平均分1-年部平均分
请问这个怎么实现呀!!!
...全文
1 点赞 收藏 4
写回复
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lzsywk 2004-03-09
xuexi
回复
txlicenhe 2003-12-08
Create table test (name char(10),km char(10),cj int)
go
insert test values('张三','语文',80)
insert test values('张三','数学',86)
insert test values('张三','英语',75)
insert test values('李四','语文',78)
insert test values('李四','数学',85)
insert test values('李四','英语',78)

想变成

姓名 语文 数学 英语
张三 80 86 75
李四 78 85 78


declare @sql varchar(8000)
set @sql = 'select name'
select @sql = @sql + ',sum(case km when '''+km+''' then cj end) ['+km+']'
from (select distinct km from test) as a
select @sql = @sql+' from test group by name'
exec(@sql)

drop table test


回复
tflb 2003-12-08
up
回复
tflb 2003-12-08
上的回答的不是我想要的答案,有别人能帮我一吗??
回复
发动态
发帖子
MS-SQL Server
创建于2007-09-28

3.2w+

社区成员

MS-SQL Server相关内容讨论专区
申请成为版主
社区公告
暂无公告