用户名:
密 码: 记住
您当前的位置:首页 > 网络编程 > sqlserver教程

如何解决一个公司的数据库笔试题目

时间:2014-11-30  来源:互联网  作者:佚名

自己在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

来顶一下
返回首页
返回首页
推荐资讯
从零开始学ASP.NET-基础篇第1/7页 从零开始学ASP.NET-基础篇第1/7页第一天 学习目的: 掌握最基本的Label、TextBox、Button控件
ASP.NET入门数据篇 ASP.NET入门数据篇对于网站编程的初学者来说,总是会上网找些源码来看,但久而
相关文章
栏目更新
栏目热门