您现在的位置: 启天网 >> 技术中心 >> 数据库 >> 正文
今天是:
SQL语句实现横排           ★★★★ 【字体:
SQL语句实现横排
作者:junsan整…    文章来源:本站原创    点击数:    更新时间:2008-8-20

有一个表:  
BH            GZLB          JE  
----------------------  
001            A              100  
001            B              150  
001            C              110  
002            A              99  
002            B              180  
002            C              150  
003            A              160  
003            B              170  
003            C              130  
用SQL语句如何将上面的表变成下面横向的排列方式呢。  
BH        A      B      C  
-------------------  
001    100    150  110  
002    99      180  150  
003    160    170  130        
(GZLB  里面的字段是动态的,不是只有A,B,C  可能还有A,B,C,D,E...)  
 
---------------------------------------------------------------  
 
if  exists(select  name  from  sysobjects  where  name='tblA'  and  xtype='U')  
     drop  table  tblA  
 
create  table  tblA(  
   BH  char(3)  not  null,  
   GZLB  varchar(3)  not  null,  
   JE  int  not  null  
)  
go  
 
insert  tblA  values('001',            'A',              100)  
insert  tblA  values('001',            'B',              150)  
insert  tblA  values('001',            'C',              110)  
insert  tblA  values('002',            'A',              99)  
insert  tblA  values('002',            'B',              180)  
insert  tblA  values('002',            'C',              150)  
insert  tblA  values('003',            'A',              160)  
insert  tblA  values('003',            'B',              170)  
insert  tblA  values('003',            'C',              130)  
 
   declare  @sql  varchar(600)  
   set  @sql  =  'select'  
   select  distinct  GZLB  as  'GZLB'  into  tmp  from  tblA  
     
     
   select  @sql  =  @sql  +'  max(case  GZLB  when  '''+  GZLB  +'''  then  JE  else  null  end)  as  '''+  GZLB  +''','  from  tmp  
   set  @sql  =  substring(@sql,  1,  len(@sql)-1)  +'  from  tblA  group  by  BH'  
   exec(@sql)  
---------------------------------------------------------------  
 
用游标  
declare  @sqlstr  varchar(2000)  
declare  @gzlb  
select  sqlstr='select  bh'  
declare  cgzlb  cursor  for  select  gzlb  from  table  
create  table  #a  
(bh  char(3))  
open  cgzlb  
fetch  next  from  cgzlb  into  @gzlb  
while  (fetch_status<>-1)  
begin  
exec('alter  table  #a  add  '+@gzlb  +'  char(1)')  
exec('insert  into  #a  (bh,'+@gzlb+'    select  bh,je  from  table  where  gzlb='''+@gzlb+'''')  
select  @sqlstr=@sqlstr+',sum(isnull('+@gzlb+'))'  
 
 
fetch  next  from  cgzlb  into  @gzlb  
end    
close  cgzlb  
deallocate  cgzlb  
select  @sqlstr=@sqlstr+'  from  #a  group  by  bh  order  by  bh  
execute(@sqlstr)  
 
---------------------------------------------------------------  
 
declare  @sql  varchar(6000)  
   set  @sql  =  'select  '  
   select  @sql  =  @sql  +'  sum(case  GZLB  when  '''+  GZLB  +'''  then  JE  else  null  end)  ['+  GZLB  +'],'  from  (select  distinct  GZLB  as  GZLB    from  tblA)  tmp  
   set  @sql  =  substring(@sql,  1,  len(@sql)-1)  +'  from  tblA  group  by  BH'  
   exec(@sql)  

文章录入:junsan    责任编辑:junsan05 
  • 上一篇文章:
  • 下一篇文章:
  • 最新热点 最新推荐 相关文章
    没有相关文章
     网友评论:(最新10条。只代表网友观点,与本站立场无关!)