PIVOT 用于将列值旋转为列名(即行转列),在 SQL Server 2000可以用聚合函数配合CASE语句实现
成都创新互联服务项目包括官渡网站建设、官渡网站制作、官渡网页制作以及官渡网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,官渡网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到官渡省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
PIVOT 的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P
注意:PIVOT、UNPIVOT是SQL Server 2005 的语法,使用需修改数据库兼容级别(在数据库属性-选项-兼容级别改为 90 )
SQL2008 中可以直接使用
完整语法:
table_source
PIVOT(
聚合函数(value_column)
FOR pivot_column
IN(column_list)
)
View Code
UNPIVOT 用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现
完整语法:
table_source
UNPIVOT(
value_column
FOR pivot_column
IN(column_list)
)
select * from
(
select id as Name , Subject = 'id' , Result = id from tb1
union all
select id as Name , Subject = 'yytc' , Result = yytcfrom tb1
) t
order by name , case Subject when 'id' then 1 when 'yytc' then 2 end
没有数据库,没法给你测试,你用这个试试,看好不好使
如果不好使,可以访问这个地址:
里边有行转列,列转行,应该有你想要的,你看看
1,首先创建数据表
2,接着插入演示数据
3,需要把学生的每门成绩集中到一行
4,编写PIVOT函数实现
5,运行以后实现行转列
6,最后还可以用case when来实现
sqlserver自带得有一个stuff函数,可以结合group by 和distinct使用,可以实现行变列
编写一个函数
create func sum_value(@kid int)
returns varchar(1000)
as
begin
declare @s varchar(1000)
set @s= ' '
select @s+=value+‘,’ from tb where kid=@kid
return @s
end
然后调用
select Kid,sum_value(Kid) from tb group by Kid