SQL 行列转换

SQL 行列转换

--普通

假设有张学生成绩表(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

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