1. 行列轉換--普通
假設有張學產生績表(CJ)如下
Name Subject Result
張三 語文 80
張三 數學 90
張三 物理 85
李四 語文 85
李四 數學 92
李四 物理 82
想變成
姓名 語文 數學 物理
張三 80 90 85
李四 85 92 82
declare @sql varchar(4000)
set @sql = 'select Name'
select @sql = @sql + ',sum(case Subject when '''+Subject+''' then Result end) ['+Subject+']'
from (select distinct Subject from CJ) as a
select @sql = @sql+' from test group by name'
exec(@sql)
2. 行列轉換--合并
有表A,
id pid
1 1
1 2
1 3
2 1
2 2
3 1
如何化成表B:
id pid
1 1,2,3
2 1,2
3 1
建立一個合并的函數
create function fmerg(@id int)
returns varchar(8000)
as
begin
declare @str varchar(8000)
set @str=''
select @str=@str+','+cast(pid as varchar) from 表A where id=@id set @str=right(@str,len(@str)-1)
return(@str)
End
go
--調用自訂函數得到結果
select distinct id,dbo.fmerg(id) from 表A
--一個行列轉化的預存程序,
create proc GetSubjectDifficult
as
declare @sql varchar(4000)
set @sql = 'select 題型 as ' + '題型'
select @sql = @sql + ' , sum(case 難度 when '''+難度+''' then 數量 end) ['+難度+']'
from (select distinct 難度 from VIEW1) as a
set @sql = @sql + ' from VIEW1 group by 題型'
exec(@sql)
GO