--普通
假設(shè)有張學(xué)生成績表(CJ)如下
[姓名] [學(xué)科] [成績]
張三 語文 80
張三 數(shù)學(xué) 90
張三 物理 85
李四 語文 85
李四 數(shù)學(xué) 92
李四 物理 82
王五 數(shù)學(xué) 60
想變成
[姓名] [語文] [數(shù)學(xué)] [物理]
張三 80 90 85
李四 85 92 82
王五 null 60 null
declare @sql varchar(4000)
set @sql = 'select 姓名'
select @sql = @sql + ',sum(case 學(xué)科 when ''' 學(xué)科 ''' then 成績 end) as ' 學(xué)科
from (select distinct 學(xué)科 from CJ) as a
set @sql = @sql ' from cj group by 姓名'
exec(@sql)
2. 行列轉(zhuǎn)換--合并
有表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
創(chuàng)建一個(gè)合并的函數(shù)
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
--調(diào)用自定義函數(shù)得到結(jié)果
select distinct id,dbo.fmerg(id) from 表A