高级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’
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
    原文地址: https://www.cnblogs.com/wuyong/archive/2006/12/27/604642.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞