Office中国论坛/Access中国论坛

标题: [讨论]这样的查询如何完成 [打印本页]

作者: 阿丰    时间: 2006-5-10 04:11
标题: [讨论]这样的查询如何完成
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        良
作者: eddieliu    时间: 2006-5-11 23:24
这个问题其实只是在ADP中建"交叉查询"的问题

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

2.在实际中我自己仅用"数据透视表"来解决这个问题,很简单很实用,而且多了筛选的功能.
作者: 阿丰    时间: 2006-5-12 04:34
我是这样做:

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     

请高手出招!
作者: wuaza    时间: 2006-5-19 20:51
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)




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3