CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

再问邹建!!交叉表的奇怪问题

楼主zh_zh_y(决不放弃)2004-08-01 16:50:40 在 MS-SQL Server / 基础类 提问

学生成绩表基表KSCJ如下:xh,kch,kscj(学号,课程号,考试成绩)  
  然后我生成了一个view(VIEW_KSCJ),   xh,xm,bh,kch,kcmc,kscj(学号,姓名,班号,课程号,课程名称,考试成绩)。本来打算通过这个视图,来进行交叉表的查询,  
  但是发现在视图里这里不能使用,报错。  
   
  例如:  
  select   XH,XM,总名次=(select   sum(1)   from(select   XH,zcj=sum(KSCJ)   from   VIEW_KSCJ   group   by   xh   )   b   where   sum(a.KSCJ)<=zcj)  
  from   VIEW_KSCJ   a   group   by   xh,xm    
   
  这里会报错:  
  服务器:   消息   8624,级别   16,状态   13,行   1  
  内部   SQL   Server   错误。  
   
  换成使用  
  select   XH,总名次=(select   sum(1)   from(select   XH,zcj=sum(KSCJ)   from   VIEW_KSCJ   group   by   xh   )   b   where   sum(a.KSCJ)<=zcj)  
  from   KSCJ   a   group   by   xh  
  通过,奇怪了,难道这里不能使用VIEW?  
  问题点数:20、回复次数:7Top

1 楼zjcxc(邹建)回复于 2004-08-01 17:08:47 得分 20

--试试(不行的话帖数据出来测试一下)  
   
  select   XH,XM,总名次=(  
  select   sum(1)   from(  
  select   XH,xm,zcj=sum(KSCJ)    
  from   VIEW_KSCJ    
  group   by   xh,xm  
  )   b   where   sum(a.KSCJ)<=b.zcj)  
  from   VIEW_KSCJ   a    
  group   by   xh,xm    
  Top

2 楼zh_zh_y(决不放弃)回复于 2004-08-01 17:36:46 得分 0

还是不行啊。  
  学号XH                     KCH               KSCJ         ID      
  00010001     0001         99.0 1  
  00010001     0002         99.0 2  
  00010001     0003         98.0 3  
  00010001     0004         97.0 4  
  00010002     0001         98.0 5  
  00010002     0002         99.0 6  
  00010002     0003         98.0 7  
  00010002     0004         97.0 8  
  00020001     0001         77.0 9  
  00020001     0002         78.0 10  
  00020001     0003         79.0 11  
  00020001     0004         80.0 12  
   
  view数据  
   
  学   号                       姓名           课程号             成绩         班号                         课程名称  
  00010001     张三 0001         99.0 0001             语文  
  00010001     张三 0002         99.0 0001             数学  
  00010001     张三 0003         98.0 0001             英语  
  00010001     张三 0004         97.0 0001             物理  
  00010002     李四 0001         98.0 0001             语文  
  00010002     李四 0002         99.0 0001             数学  
  00010002     李四 0003         98.0 0001             英语  
  00010002     李四 0004         97.0 0001             物理  
  00020001     王无 0001         77.0 0002             语文  
  00020001     王无 0002         78.0 0002             数学  
  00020001     王无 0003         79.0 0002             英语  
  00020001     王无 0004         80.0 0002             物理  
  Top

3 楼zh_zh_y(决不放弃)回复于 2004-08-01 17:38:21 得分 0

其中view是从三个基表中生成的。  
  学生表(xh,xm,bh)  
  课程表(kch,kcmc)  
  kschj(xh,kch,kscj)  
  Top

4 楼zjcxc(邹建)回复于 2004-08-01 20:39:26 得分 0

你给view数据给我做什么?   我要模拟你的环境,看看会否有这种问题才行啊.Top

5 楼zjcxc(邹建)回复于 2004-08-01 20:51:17 得分 0

--测试  
   
  --测试数据  
  create   table   学生表(xh   varchar(10),xm   varchar(10),bh   varchar(10))  
  insert   学生表   select   '00010001','张三','0001'  
  union     all       select   '00010002','李四','0001'  
  union     all       select   '00020001','王无','0002'  
   
  create   table   课程表(kch   varchar(10),kcmc   varchar(10))  
  insert   课程表   select   '0001','语文'  
  union     all       select   '0002','数学'  
  union     all       select   '0003','英语'  
  union     all       select   '0004','物理'  
   
  create   table   kschj(xh   varchar(10),kch   varchar(10),kscj   decimal(10,1))  
  insert   kschj   select   '00010001','0001',99.0  
  union     all       select   '00010001','0002',99.0  
  union     all       select   '00010001','0003',98.0  
  union     all       select   '00010001','0004',97.0  
  union     all       select   '00010002','0001',98.0  
  union     all       select   '00010002','0002',99.0  
  union     all       select   '00010002','0003',98.0  
  union     all       select   '00010002','0004',97.0  
  union     all       select   '00020001','0001',77.0  
  union     all       select   '00020001','0002',78.0  
  union     all       select   '00020001','0003',79.0  
  union     all       select   '00020001','0004',80.0  
  go  
   
  --视图  
  create   view   VIEW_KSCJ  
  as  
  select   a.xh,a.xm,a.bh,b.kch,b.kcmc,c.kscj  
  from   学生表   a,课程表   b,kschj   c  
  where   a.xh=c.xh    
  and   b.kch=c.kch  
  go  
   
  --显示视图结果  
  select   *   from   VIEW_KSCJ  
  go  
   
  --从视图中做统计  
  select   XH,XM,总名次=(  
  select   sum(1)   from(  
  select   XH,xm,zcj=sum(KSCJ)    
  from   VIEW_KSCJ    
  group   by   xh,xm  
  )   b   where   sum(a.KSCJ)<=b.zcj)  
  from   VIEW_KSCJ   a    
  group   by   xh,xm    
  go  
   
  --删除测试环境  
  drop   table   学生表,课程表,kschj  
  drop   view   VIEW_KSCJ  
   
  /*--测试结果  
  xh                   xm                   bh                   kch                 kcmc               kscj                    
  ----------   ----------   ----------   ----------   ----------   ------------    
  00010001       张三                   0001               0001               语文                   99.0  
  00010001       张三                   0001               0002               数学                   99.0  
  00010001       张三                   0001               0003               英语                   98.0  
  00010001       张三                   0001               0004               物理                   97.0  
  00010002       李四                   0001               0001               语文                   98.0  
  00010002       李四                   0001               0002               数学                   99.0  
  00010002       李四                   0001               0003               英语                   98.0  
  00010002       李四                   0001               0004               物理                   97.0  
  00020001       王无                   0002               0001               语文                   77.0  
  00020001       王无                   0002               0002               数学                   78.0  
  00020001       王无                   0002               0003               英语                   79.0  
  00020001       王无                   0002               0004               物理                   80.0  
   
  (所影响的行数为   12   行)  
   
   
  XH                   XM                   总名次                    
  ----------   ----------   -----------    
  00010001       张三                   1  
  00010002       李四                   2  
  00020001       王无                   3  
   
  (所影响的行数为   3   行)  
  --*/Top

6 楼zjcxc(邹建)回复于 2004-08-01 20:51:43 得分 0

没发现有问题.  
   
  如果你的是sql7.0,那就不知道了,没有这个测试环境.Top

7 楼zh_zh_y(决不放弃)回复于 2004-08-02 15:19:44 得分 0

使用的是sql2000,我再好好想想看,到底问题出在什么地方?  
  Top

相关问题

  • 邹建大哥.请教关于交叉表的问题
  • 特此答谢邹建老师:如何实现动态交叉表。
  • Sql Server 中如何创建交叉表查询?
  • 水晶报表中如何新建交叉表?
  • 关于交叉表,这个存储过程怎么写,邹建,马可以及其他高手请进!在线等待,解决马上给分
  • 交叉表(其实是一个视图)的建立____help,help,help!!!_study,study,you and me!!!
  • 庆祝皱建兄弟出书,还要麻烦,这个交叉表怎么做?
  • 交叉表問題
  • 交叉表问题
  • 关于交叉表

关键词

  • 学号
  • 视图
  • 课程
  • view
  • kscj
  • 交叉表
  • xh
  • kch
  • 考试成绩
  • xm

得分解答快速导航

  • 帖主:zh_zh_y
  • zjcxc

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo