首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > SQL Server >

这样的视图怎么提取?

2012-01-13 
这样的视图如何提取???一个在线考试系统的数据库,有个视图是这样设计的,请问如何实现通过sql可以提取到如

这样的视图如何提取???
一个在线考试系统的数据库,有个视图是这样设计的,请问如何实现
通过sql可以提取到如下的表

考生姓名   试卷名称   题目id     考生答案   标准答案    
  姓名1         名称1         Qid1           xxxx           xxxx
  姓名1         名称1         Qid2           xxxx           xxxx
  姓名1         名称2         Qid3           xxxx           xxxx
  姓名1         名称2         Qid4           xxxx           xxxx
  姓名1         名称3         Qid5           xxxx           xxxx
  姓名1         名称3         Qid6           xxxx           xxxx
  姓名2         名称1         Qid7           xxxx           xxxx
  姓名2         名称1         Qid8           xxxx           xxxx
  姓名2         名称2         Qid9           xxxx           xxxx
  姓名2         名称2         Qid10         xxxx           xxxx
  姓名2         名称3         Qid11         xxxx           xxxx
  姓名2         名称3         Qid12         xxxx           xxxx
          。。。。。。。

*其中xxxx为任意值,题目名称也可能更多

如何生成这样的视图:

考生名称       (试卷)名称1       (试卷)名称2       (试卷)名称3
    姓名1                 得分x                   得分x                 得分x
    姓名2                 得分x                   得分x                 得分x
        。。。。。。。

得分是通过一些简单的判断得出来的。

就这些分数了,全抛了!

[解决办法]
create table T(考生姓名 varchar(10), 试卷名称 varchar(10), 题目id varchar(10) , 考生答案 varchar(10) , 标准答案 varchar(10))
insert T select '姓名1 ', '名称1 ', 'Qid1 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称1 ', 'Qid2 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称2 ', 'Qid3 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称2 ', 'Qid4 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称3 ', 'Qid5 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称3 ', 'Qid6 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称1 ', 'Qid7 ', 'xxxx ', 'xxxx '


union all select '姓名2 ', '名称1 ', 'Qid8 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称2 ', 'Qid9 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称2 ', 'Qid10 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称3 ', 'Qid11 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称3 ', 'Qid12 ', 'xxxx ', 'xxxx '


declare @sql varchar(8000)
set @sql= 'select 考生姓名, '
select @sql=@sql+quotename(rtrim(试卷名称))+ '=max(case when 试卷名称= ' ' '+rtrim(试卷名称)+ ' ' ' then 题目id end), '
from T
group by 试卷名称
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from T group by 考生姓名 '

exec(@sql)
[解决办法]
有问题啊,试卷的分数在表里都没有, 那怎么生成啊?

[解决办法]
先生成分数,再用动态SQL
[解决办法]


create table T(考生姓名 varchar(10), 试卷名称 varchar(10), 题目id varchar(10) , 考生答案 varchar(10) , 标准答案 varchar(10))
insert T select '姓名1 ', '名称1 ', 'Qid1 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称1 ', 'Qid2 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称2 ', 'Qid3 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称2 ', 'Qid4 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称3 ', 'Qid5 ', 'xxxx ', 'xxxx '
union all select '姓名1 ', '名称3 ', 'Qid6 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称1 ', 'Qid7 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称1 ', 'Qid8 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称2 ', 'Qid9 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称2 ', 'Qid10 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称3 ', 'Qid11 ', 'xxxx ', 'xxxx '
union all select '姓名2 ', '名称3 ', 'Qid12 ', 'xxxx ', 'xxxx '


declare @sql varchar(8000)
set @sql= 'select 考生姓名, '
select @sql=@sql+quotename(rtrim(试卷名称))+ '=sum(case when 试卷名称= ' ' '+rtrim(试卷名称)+ ' ' ' then case when 考生答案=标准答案 then 1 else 0 end end), '
from T
group by 试卷名称
select @sql=left(@sql, len(@sql)-1), @sql=@sql+ ' from T group by 考生姓名 '

exec(@sql)

热点排行