自己在SQL Server中建立一个数据库(或利用现有数据库),再建立下表。
SQL Server中表test:
CREATE TABLE test(
Code smallint NOT NULL, --学生编号
Name varchar(10) NOT NULL, --学生姓名
Lessons varchar(1000) NOT NULL, --课程名称,每个名称以“,”结束
Score1 varchar(1000) NOT NULL, --期中成绩,每课程成绩以“,”结束
Score2 varchar(1000) NOT NULL, --期末成绩,每课程成绩以“,”结束
PRIMARY KEY (Code)
)
go
|
实例记录数据:
insert into test (Code,Name,Lessons,Score1,Score2) values(20301,'张三','语文,数学
,外语,','100,99,98,','97,96,95,')
go
insert into test (Code,Name,Lessons,Score1,Score2) values(20302,'李四','语文,数学
,外语,','90,89,88,','87,86,85,')
go
insert into test (Code,Name,Lessons,Score1,Score2) values(20303,'王五','语文,数学
,外语,','70,69,68,','67,66,65,')
go
|
屏幕显示实例:
编号 姓名 期中 期末 期中 期末 期中 期末
课程 20301 张三 100 97 99 96 98 95
语文 20302 李四 90 87 89 86 88 85
数学 20302 李四 90 87 89 86 88 85
外语 20303 王五 70 67 69 66 68 65
|
题目的难点在于科目是动态的
陶清网站已经有人用sql实现了
他说没有用到游标只用了一个函数
函数已经给出
但后面的具体实现过程他没有提供
还请csdn上的高手们赐教
谢谢
drop table test
go
drop table #t
go
CREATE TABLE test(
Code smallint NOT NULL, --学生编号
Name varchar(10) NOT NULL, --学生姓名
Lessons varchar(1000) NOT NULL, --课程名称,每个名称以“,”结束
Score1 varchar(1000) NOT NULL, --期中成绩,每课程成绩以“,”结束
Score2 varchar(1000) NOT NULL, --期末成绩,每课程成绩以“,”结束
PRIMARY KEY (Code)
)
go
insert into test (Code,Name,Lessons,Score1,Score2) values(20301,'张三','语文,数学
,外语,','100,99,98,','97,96,95,')
go
insert into test (Code,Name,Lessons,Score1,Score2) values(20302,'李四','语文,数学
,外语,','90,89,88,','87,86,85,')
go
insert into test (Code,Name,Lessons,Score1,Score2) values(20303,'王五','语文,数学
,外语,','70,69,68,','67,66,65,')
go
/*
|
屏幕显示实例:
编号 姓名 期中 期末 期中 期末 期中 期末
课程 20301 张三 100 97 99 96 98 95
语文 20302 李四 90 87 89 86 88 85
数学 20302 李四 90 87 89 86 88 85
外语 20303 王五 70 67 69 66 68 65
|
*/
create table #t(
Code smallint NOT NULL, --学生编号
Name varchar(10) NOT NULL, --学生姓名
Lessons varchar(100) NOT NULL, --课程名称,每个名称以“,”结束
Score1 int,
Score2 int
)
go
Select 1
while @@rowcount > 0
begin
insert #t
select code,name
,left(lessons,charindex(',',lessons)-1)
,left(score1,charindex(',',score1)-1)
,left(score2,charindex(',',score2)-1)
from test
where charindex(',',lessons)>0
update test set lessons = right(lessons,len(lessons)-charindex(',',lessons)),
score1 = right(score1,len(score1)-charindex(',',score1)) ,
score2 = right(score2,len(score2)-charindex(',',score2))
where charindex(',',lessons)>0
end
declare @sql varchar(8000)
set @sql = 'select code,name'
select @sql = @sql + ',sum(case lessons when '''+lessons+''' then cast
(score1
as int) end) ['+rtrim(lessons)+'中]'
+ ',sum(case lessons when '''+lessons+''' then cast
(score2 as int) end) ['+rtrim(lessons)+'末]'
from (select distinct lessons as lessons from #t) as a
select @sql = @sql+' from #t group by code,name'
exec(@sql)
code name 数学中 数学末 外语中 外语末 语文中 语文末
20302 李四 89 86 88 85 90 87
20303 王五 69 66 68 65 70 67
20301 张三 99 96 98 95 100 97
|
|