加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

SQLServer行列转换 Pivot UnPivot 动态实现

发布时间:2020-12-12 12:40:37 所属栏目:MsSql教程 来源:网络整理
导读:PIVOT 用于将列值旋转为列名(即行转列),在SQL Server ? 2000 可以用聚合函数配合 CASE 语句实现 PIVOT 的一般语法是: PIVOT ( 聚合函数(列) FOR 列 in (…) )AS P 完整语法: table_source PIVOT( 聚合函数( value_column ) FOR pivot_column IN(colum

PIVOT用于将列值旋转为列名(即行转列),在SQL Server?2000可以用聚合函数配合CASE语句实现

PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (…) )AS P

完整语法:

table_source

PIVOT(

聚合函数(value_column

FOR pivot_column

IN(<column_list>)

)

?

UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2000可以用UNION来实现

UNPIVOT(

value_column

?

注意:PIVOT、UNPIVOT是SQL Server 2005?的语法,使用需修改数据库兼容级别

?在数据库属性->选项->兼容级别改为 ? 90


4、使用SQL Server 2005静态SQL

select*fromtb?pivot(max(分数)for课程in(语文,数学,物理))a

5使用SQL Server 2005动态SQL

--使用stuff()

declare@sqlvarchar(8000)

set@sql=''??--初始化变量@sql

select@sql=@sql+','+课程fromtbgroupby课程--变量多值赋值

set@sql=stuff(@sql,1,'')--去掉首个','

set@sql='select * from tb?pivot (max(分数) for课程in ('+@sql+'))a'

exec(@sql)

--或使用isnull()

–-获得课程集合

select@sql=isnull(@sql+',','')+课程fromtbgroupby课程???????????

exec(@sql)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读