sql server 行列轉換

iSQlServer發表於2009-12-15
程式碼
-----------建立產品產量表
create table tb2(年份 varchar(10) , 產品 varchar(10) , 產量 int)
insert into tb2 values('2009' , '毛巾' , 74)
insert into tb2 values('2009' , '西裝' , 83)
insert into tb2 values('2009' , '皮鞋' , 93)
insert into tb2 values('2008' , '西褲' , 74)
insert into tb2 values('2008' , 'T恤' , 84)
insert into tb2 values('2008' , '皮鞋' , 94)
go
---------建立學生成績表
create table tb(姓名 varchar(10) , 課程 varchar(10) , 分數 int)
insert into tb values('張三' , '語文' , 74)
insert into tb values('張三' , '數學' , 83)
insert into tb values('張三' , '物理' , 93)
insert into tb values('李四' , '語文' , 74)
insert into tb values('李四' , '數學' , 84)
insert into tb values('李四' , '物理' , 94)
go


--------普通轉換
select 姓名 as 姓名 ,
  
max(case 課程 when '語文' then 分數 else 0 end) 語文,
  
max(case 課程 when '數學' then 分數 else 0 end) 數學,
  
max(case 課程 when '物理' then 分數 else 0 end) 物理
from tb
group by 姓名


---動態sql語句轉換
declare @sql varchar(8000)
set @sql = 'select 姓名 '
select @sql = @sql + ' , max(case 課程 when ''' + 課程 + ''' then 分數 else 0 end) [' + 課程 + ']'
from (select distinct 課程 from tb) as a
set @sql = @sql + ' from tb group by 姓名'
exec(@sql)



SELECT * FROM tb
SELECT * FROM tb2

select 產品 as 產品,
 
max(case 年份 when '2009' then 產量 else 0 end'2009'
from tb2
group by 產品

declare @sql varchar(8000)
declare @thisyear varchar(20)
declare @yesteryear varchar(20)
declare @yyesteryear varchar(20)
set @thisyear = DATEPART (year,getdate())
set @yesteryear =(DATEPART (year,getdate())-1)
set @yyesteryear = (DATEPART (year,getdate())-2)
set @sql='select 產品 as 產品'
set @sql = @sql+',case 年份 when '''+@thisyear+''' then 產量 else 0 end['+'this'+']'
set @sql = @sql+',case 年份 when '''+@yesteryear+''' then 產量 else 0 end['+@yesteryear+']'
set @sql = @sql+',case 年份 when '''+@yyesteryear+''' then 產量 else 0 end ['+@yyesteryear+']'
select @sql=@sql
from (select 年份  as b from tb2) as a
set @sql = @sql +'from tb2 group by 產品,年份,產量'
exec(@sql)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/16436858/viewspace-622493/,如需轉載,請註明出處,否則將追究法律責任。

相關文章