设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2345|回复: 2
打印 上一主题 下一主题

[查询] [讨论]用SQL实现交叉表查询

[复制链接]
跳转到指定楼层
1#
发表于 2006-4-20 17:58:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
SQL SERVER 2000数据库中有以下表,表的结构如下:
班级:班级编号,班级
学年度:学年度编号,学期
课程名称:课程编号,课程名称
学生名单:学籍号,姓名,班级编号
成绩单:学籍号,学年度编号,课程编号,成绩评定

如何用SQL实现交叉表查询,出成绩报告如下:
     学期                       班级         姓名    施工技术   施工项目  预算 ......
04-05学年上学期   03工民建4    李好人      75            82         82
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2006-4-20 18:44:00 | 只看该作者
我的做法是先把这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.成绩单.成绩评定
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

然后再交叉表查询:

declare @sql varchar(8000)

set @sql = 'select  学期,班级,班中序号,姓名,'

select @sql = @sql + '(case 课程名称 when '''+课程名称+'''

then 成绩评定 else '''+ +'''  end) as '''+课程名称+''','

from (select 课程名称  from 成绩查询 ) as a

select @sql = left(@sql,len(@sql)-1) +  ' from 成绩查询 '+ ' where 姓名='+'''李好人'''+' and 学期='+'''04-05学年上学期'''+' order  by 学期'

exec(@sql)

提示错误信息:

服务器: 消息 170,级别 15,状态 1,行 119
第 119 行: '李好人' 附近有语法错误。
服务器: 消息 105,级别 15,状态 1,行 119
字符串 ' order  by 学期' 之前有未闭合的引号。


然后没招了!请各位高手帮忙。

[此贴子已经被作者于2006-4-20 10:46:53编辑过]

3#
发表于 2006-4-29 19:07:00 | 只看该作者
from 成绩查询 '+ ' where 姓名='+'''李好人'''

我想问一下,李好人将来就会是一个参数,不如直接这样...

set @vcname='李好人'

... from 成绩查询 '+ ' where 姓名[url=mailto:='+@vcname]='+@vcname[/url]

或者

from 成绩查询 '+ ' where 姓名=李好人'

分别做一下测试看看
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-11-15 12:18 , Processed in 0.081996 second(s), 26 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表