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

一个表的小问题

楼主tieying830616()2006-05-04 10:08:22 在 MS-SQL Server / 应用实例 提问

表一:  
  --------------------------------------------------------  
  姓名     学号                     科目名称     科目分数         班级名称    
   
  张三   2003001                 网页设计     95     2002级计算机一班    
  张三   2003001                 数据结构     76     2002级计算机一班    
  李四   2003002                 数据结构     65     2002级计算机二班  
  李四   2003002                 网页设计     65     2002级计算机二班  
  王五   2003003                 英语             70     2002级计算机一班  
  李四   2003002                 英语             75     2002级计算机二班  
  张三   2003001                 英语             46     2002级计算机一班  
  王五   2003003                 网页设计     78     2002级计算机一班  
  ---------------------------------------------------------  
   
  欲把表一转为下面形式  
   
  --------------------------------------------------------  
  姓名   学号       科目名称   科目分数   科目名称   科目分数   科目名称   科目分数   班级名称   总分   排名    
   
  张三   2003001   网页设计     95           数据结构       76             英语         46       2002级计算机一班   217       1  
  李四   2003002   网页设计     65           数据结构       65               英语       75     2002级计算机二班   205       2  
  王五   2003003   网页设计     78           NULL           MULL             英语         70     2002级计算机一班   148     3  
   
  -----------------------------------------------------------  
   
  已实现动态语句在查询分析器中实现  
  set   nocount   on  
  create   table   #tmp(   姓名   nvarchar(50),学号   nvarchar(50),科目名称   nvarchar(50),科目分数   INT,班级名称   nvarchar(50))  
  insert   into   #tmp    
  select   *   from   表一  
  DECLARE       @SQL       VARCHAR(8000)        
      SET       @SQL='SELECT         姓名,学号,班级名称'        
      SELECT       @SQL=       @SQL+            
      ',MIN(CASE       WHEN       科目名称       =       '''       +       科目名称       +       '''       THEN       科目分数       END)       ['       +       科目名称       +       ']'        
      FROM       (SELECT       DISTINCT       科目名称       FROM       #tmp)       A        
      SET       @SQL=@SQL+',sum(科目分数)   as   总分     FROM       #tmp       GROUP       BY       姓名,学号,班级名称   order   by   总分   desc'        
      exec       (@SQL)        
  drop   table   #tmp  
  ------------------------------  
  现想把已实现的第二种格式保存为另一张表二     且表二随表一的数据而更新  
   
  请教实现的语句(包括保存更新)         感谢!  
   
  问题点数:50、回复次数:6Top

1 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-05-04 11:46:21 得分 0

 
   
  --将动态SQL语句放在存储过程中,直接使用存储过程返回的数据集,没有必要单独存放一张表  
   
  create   procedure   dbo.sp_test  
  as  
  declare   @sql   varchar(8000)    
  set   @sql='select   姓名,学号,班级名称'    
  select   @sql=   @sql+   ',min(case   when   科目名称   =   '''   +   科目名称   +   '''   then   科目分数   end)   ['   +   科目名称   +   ']'    
  from   (select   distinct   科目名称   from   表一)   a    
  set   @sql=@sql+',sum(科目分数)   as   总分     from   表一   group   by   姓名,学号,班级名称   order   by   总分   desc'    
  exec   (@sql)  
  go  
   
   
  --直接使用存储过程返回的数据集  
  select   *   from   openrowset('sqloledb','Trusted_Connection=yes','exec   pubs.dbo.sp_test')    
   
   
  drop   proc   sp_test  
  go  
   
  Top

2 楼wangtiecheng(不知不为过,不学就是错!)回复于 2006-05-04 11:48:12 得分 0

--改:  
   
   
   
  --将动态SQL语句放在存储过程中,直接使用存储过程返回的数据集,没有必要单独存放一张表  
   
  create   procedure   dbo.sp_test  
  as  
  declare   @sql   varchar(8000)    
  set   @sql='select   姓名,学号,班级名称'    
  select   @sql=   @sql+   ',min(case   when   科目名称   =   '''   +   科目名称   +   '''   then   科目分数   end)   ['   +   科目名称   +   ']'    
  from   (select   distinct   科目名称   from   表一)   a    
  set   @sql=@sql+',sum(科目分数)   as   总分     from   表一   group   by   姓名,学号,班级名称   order   by   总分   desc'    
  exec   (@sql)  
  go  
   
   
  --直接使用存储过程返回的数据集  
  select   *   from   openrowset('sqloledb','Trusted_Connection=yes','exec   数据库名.dbo.sp_test')    
   
   
  drop   proc   sp_test  
  go  
   
  Top

3 楼tieying830616()回复于 2006-05-04 11:56:26 得分 0

我想在一编辑页面控件中读取显示表二格式中内容    
   
  不新建一张表不知道怎样读取啊?Top

4 楼yuweiwei(YWW(杨思))回复于 2006-05-04 14:17:23 得分 0

象Top      
    wangtiecheng(不知不为过,不学就是错!)     大哥那样先建一个存储过程!!  
   
   
  create   procedure   dbo.sp_test  
  as  
  declare   @sql   varchar(8000)    
  set   @sql='select   姓名,学号,班级名称'    
  select   @sql=   @sql+   ',min(case   when   科目名称   =   '''   +   科目名称   +   '''   then   科目分数   end)   ['   +   科目名称   +   ']'    
  from   (select   distinct   科目名称   from   表一)   a    
  set   @sql=@sql+',sum(科目分数)   as   总分     from   表一   group   by   姓名,学号,班级名称   order   by   总分   desc'    
  exec   (@sql)  
  go  
   
  然后在高级语言中调用  
  以C#为列子  
  string   sql="exec   dbo.sp_test"   ;  
      SqlDataAdapter   da=new   SqlDataAdapter(sql,SqlConnection)   ;  
  DataSet   ds=new   DataSet();  
  da.fill(DataSet)  
      this.DataGrid1.DataSource=ds  
      this.DataGrid1.DataBind();Top

5 楼tieying830616()回复于 2006-05-04 15:34:12 得分 0

厉害     问个弱弱的问题     在高级语言调用后就没有我想要的排名列了     能否帮我解决一下    
  谢谢!Top

6 楼tieying830616()回复于 2006-05-04 16:58:47 得分 0

排名可以随DataGrid分页改变     比如第二页开始排名为11Top

相关问题

关键词

得分解答快速导航

  • 帖主:tieying830616

相关链接

  • SQL Server类图书

广告也精彩

反馈

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