首页 > 开发 > 综合 > 正文

行列转换

2024-07-21 02:11:55
字体:
来源:转载
供稿:网友

最大的网站源码资源下载站,

1. 行列转换--普通

假设有张学生成绩表(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 @[email protected] ',' cast(pid as varchar) from 表a where [email protected]
set @str=right(@str,len(@str)-1)
return(@str)
end
go

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表