设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

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

[查询] [讨论]这样的查询如何完成

[复制链接]
跳转到指定楼层
1#
发表于 2006-5-10 04:11:00 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
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个表生成SQL交叉表查询,形式如下:

          学期               班级    姓名  CAD    施工技术  施工组织 ...  工程法规  综合实习...
04-05学年上学期  03工民建1  李可   75           83          90
04-05学年下学期  03工民建1  李可                                               88        良
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2006-5-11 23:24:00 | 只看该作者
这个问题其实只是在ADP中建"交叉查询"的问题

1.首先所谓的交叉查询仅仅是将数据组织成你需要看到的样子而已(所以在ADP中叫"视图").这也就是说任何形式在理论上都是可以实现的,ADP中没有现有的交叉表功能(不知道为什么),所以需要用存储过程,比较复杂,如果你一定要研究,可以参考http://www.office-cn.net/forum.php?mod=viewthread&tid=8843

2.在实际中我自己仅用"数据透视表"来解决这个问题,很简单很实用,而且多了筛选的功能.
3#
 楼主| 发表于 2006-5-12 04:34:00 | 只看该作者
我是这样做:

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     

请高手出招!
4#
发表于 2006-5-19 20:51:00 | 只看该作者
declare @sql varchar(8000)
set @sql = 'select  学期,班级,班中序号,姓名,'
select @sql = @sql + 'sum(case 课程名称 when '''+课程名称+'''
then 成绩评定 else 0 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)
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-14 14:46 , Processed in 0.090968 second(s), 27 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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