SQL行列转换

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 CJ group by name '
select   @sql
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

创建一个合并的函数
alter   function  fmerg( @id   int )
returns   varchar ( 8000 )
as
begin
declare   @str   varchar ( 8000 )
set   @str = ''
select   @str = @str + ' , ' + cast (pid  as   varchar from  test  where  id = @id  
set   @str = right ( @str , len ( @str ) - 1 )
return ( @str )
End
go

-- 调用自定义函数得到结果
select   id,dbo.fmerg(id)  from  test

你可能感兴趣的:(行列转换)