行变列,交叉查询

/*范例表  
  create   table   表1   (  
  號數   char(10),    
  成績   integer,    
  科目   char(10)   )    
  insert   into   表1   select   '1',60,'数学'    
  union   select   '1',43,'物理'    
  union   select   '1',100,'语文'    
  union   select   '2',87,'语文'    
  union   select   '2',99,'数学'    
  union   select   '2',89,'物理'    
  union   select   '2',87,'语文'    
  */  
  Create   procedure   RowToColumn  
      @Table   varchar(30),                     --表名  
      @MasterField   varchar(30), --待转名称列名   char字段  
      @SlaveField   varchar(30), --待转数据列名   int型字段  
      @GroupID   varchar(30) --分组ID  
      as  
  --调用方法   RowToColumn   '表1','科目','成績','號數'  
  --by   jinjazz     环境   SQLServer2000  
  begin  
      DECLARE   @mSQL   VARCHAR(8000)  
          set   @msql   =   'DECLARE   @SQL   VARCHAR(8000)'  
          set   @msql   =   @msql   +   '   set   @SQL=   ''select   '   +   @GroupID   +   ''''  
          set   @msql   =   @msql   +   '   SELECT   @SQL=   @SQL+'',max(CASE   WHEN   '   +  
          @MasterField   +   '=''''''+'   +   @MasterField   +   '+''''''   then     '   +   @SlaveField   +  
              '   else   0   end   )[''+'   +   @MasterField   +   '+'']''   from(select   distinct   '   +  
              @MasterField   +   '   from   '   +   @Table   +   ')   a'  
          set   @msql   =   @msql   +   '   SET   @SQL=@SQL+   ''   from   '   +   @Table   +   '   group   by   '   +  
              @GroupID   +   ''''  
          set   @msql   =   @msql   +   '   exec(@SQL)'  
          exec(@msql)  
  end 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值