SQL SERVER 2000 数据库“教务管理数据”中有以下5个表
学生名单表:
学籍号 int(4)
姓名 nvarchar(8)
班级编号 int(4)
学年度表:
学年度编号 smallint(2)
学期 nvarchar(10)
班级表:
班级编号 int(4)
班级 nvarchar(15)
课程名称表:
课程编号 smallint(2)
课程名称 nvarchar(15)
成绩单表:
学籍号 int(4)
学年度编号 smallint(2)
课程编号 smallint(2)
期评成绩 nvarchar(3)
已由上述5个表建立好查询“成绩查询”:
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_NULLS ON
GO
ALTER VIEW dbo.成绩查询
AS
SELECT TOP 100 PERCENT dbo.学年度.学期, dbo.班级.班级, dbo.学生名单.学籍号,
dbo.学生名单.班中序号, dbo.学生名单.姓名, dbo.课程名称.课程名称,
dbo.成绩单.段考成绩, dbo.成绩单.期评成绩, dbo.成绩单.学期补考, dbo.成绩单.毕业补考,
CASE WHEN (学期补考 = '补及' OR
毕业补考 = '补及') THEN '补及' ELSE 期评成绩 END AS 成绩评定,
dbo.课程名称.课程编号, dbo.学年度.学年度编号, dbo.班级.班级编号,
dbo.学生名单.在校
FROM dbo.班级 INNER JOIN
dbo.学生名单 ON dbo.班级.班级编号 = dbo.学生名单.班级编号 INNER JOIN
dbo.成绩单 ON dbo.学生名单.学籍号 = dbo.成绩单.学籍号 INNER JOIN
dbo.课程名称 ON dbo.成绩单.课程编号 = dbo.课程名称.课程编号 INNER JOIN
dbo.学年度 ON dbo.成绩单.学年度编号 = dbo.学年度.学年度编号
ORDER BY dbo.学年度.学期 DESC, dbo.班级.班级, dbo.学生名单.班中序号,
dbo.学生名单.学籍号, dbo.课程名称.课程名称
GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO
如何生成SQL交叉表查询,形式如下:
学期 班级 姓名 CAD 施工技术 施工组织 ...
04-05学年上学期 03工民建1 李可 75 83 90
我是这样做:
declare @sql varchar(8000)
set @sql = 'select 学期,班级,班中序号,姓名,'
select @sql = @sql + '(case 课程名称 when '''+课程名称+'''
then 成绩评定 else '''+ +''' end) as '''+课程名称+''','
from (select distinct 课程名称,学期 from 成绩查询 where 姓名 like '%李可%' and 学期 like
'%04-05学年上学期%' ) as a
select @sql = left(@sql,len(@sql)-1) + ' from 成绩查询 '+ ' where 姓名 like
'+'''%李可%'''+' and 学期 like '+'''%04-05学年上学期%''' +' order by 学期'
exec(@sql)
结果:
学期 班级 姓名 CAD 施工技术 施工组织 ...
04-05学年上学期 03工民建1 李可 75
04-05学年上学期 03工民建1 李可 83
04-05学年上学期 03工民建1 李可 90
怎样才得下面的结果:
学期 班级 姓名 CAD 施工技术 施工组织 ...
04-05学年上学期 03工民建1 李可 75 83 90
请高手出招!