工欲善其事,必先利其器,追求深透.Net

 

SQL表交叉显示及实现方法

 假设有张学生成绩表(t)如下   
    
          Name   Subject   Result   
          张三   语文  73   
          张三   数学  83   
          张三   物理  93   
          李四   语文  74   
          李四   数学  84   
          李四   物理  94   
    
          想变成     
          姓名   语文   数学   物理   
          张三   73  83  93   
          李四   74  84  94  
代码
create   table   #t   
          (   
          Name         
varchar(10)   ,   
          Subject   
varchar(10)   ,   
          Result     
int   
          )   
    
          
insert   into   #t(Name   ,   Subject   ,   Result)   values('张三','语文','73')   
          
insert   into   #t(Name   ,   Subject   ,   Result)   values('张三','数学','83')   
          
insert   into   #t(Name   ,   Subject   ,   Result)   values('张三','物理','93')   
          
insert   into   #t(Name   ,   Subject   ,   Result)   values('李四','语文','74')   
          
insert   into   #t(Name   ,   Subject   ,   Result)   values('李四','数学','83')   
          
insert   into   #t(Name   ,   Subject   ,   Result)   values('李四','物理','93')   
    
          
declare   @sql   varchar(8000)   
          
set   @sql   =   'select   Name   as  姓名'   
          
select   @sql   =   @sql   +   '   ,   sum(case   Subject   when   '''   +   Subject   +   '''   then   Result   end)   ['   +   Subject   +   ']'   
          
from   (select   distinct   Subject   from   #t)   as   a   
          
set   @sql   =   @sql   +   '   from   #t   group   by   name'   
          
exec(@sql)     
    
          
drop   table   #t   
    
          
--结果   
          姓名               数学                 物理                 语文                       
          
----------   -----------   -----------   -----------     
          李四               83                     93                     74   
          张三               
83                     93                     73   

 

 如果上述两表互相换一下:即   
    
          姓名   语文   数学   物理   
          张三   73  83  93   
          李四   74  84  94   
    
          想变成     
    
          Name   Subject   Result   
          张三   语文  73   
          张三   数学  83   
          张三   物理  93   
          李四   语文  74   
          李四   数学  84   
          李四   物理  94  
代码
create   table   #t   
          (   
          姓名   
varchar(10)   ,   
          语文   
int   ,   
          数学   
int   ,   
          物理   
int   
          )   
    
          
insert   into   #t(姓名   ,   语文   ,   数学   ,   物理)   values('张三',73,83,93)   
          
insert   into   #t(姓名   ,   语文   ,   数学   ,   物理)   values('李四',74,84,94)   
    
          
select   姓名   as   Name,'语文'   as   Subject,语文   as   Result   from   #t   union   
          
select   姓名   as   Name,'数学'   as   Subject,数学   as   Result   from   #t   union   
          
select   姓名   as   Name,'物理'   as   Subject,物理   as   Result   from   #t   
          
order   by   姓名   desc     
    
          
drop   table   #t   
      
          Name               Subject   Result               
          
----------   -------   -----------     
          张三               数学         83   
          张三               物理         
93   
          张三               语文         
73   
          李四               数学         
84   
          李四               物理         
94   
          李四               语文         
74   
    
          (所影响的行数为   
6   行)   

 

 

posted on 2010-01-25 17:45  Jess5  阅读(425)  评论(2)    收藏  举报

导航