--普通
假設有張學生成績表(CJ)如下
[姓名] [學科] [成績]
張三 語文 80
張三 數學 90
張三 物理 85
李四 語文 85
李四 數學 92
李四 物理 82
王五 數學 60
想變成
[姓名] [語文] [數學] [物理]
張三 80 90 85
李四 85 92 82
王五 null 60 null
declare @sql varchar(4000)
set @sql = 'select 姓名'
select @sql = @sql + ',sum(case 學科 when ''' 學科 ''' then 成績 end) as ' 學科
from (select distinct 學科 from CJ) as a
set @sql = @sql ' from cj group by 姓名'
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