SQL Server使用PIVOT与unPIVOT实现行列转换


Posted in SQL Server onMay 25, 2022

一、sql行转列:PIVOT

1、基本语法:

create table #table1
    (    id int ,code varchar(10) , name varchar(20) );
go

insert into #table1 ( id,code, name ) values ( 1, 'm1','a' ), ( 2,  'm2',null ), ( 3, 'm3', 'c' ), ( 4,  'm2','d' ), ( 5,  'm1','c' );
go

select * from #table1;

--方法一(推荐)
select PVT.code, PVT.a, PVT.b, PVT.c
      from #table1 pivot(count(id) for name in(a, b, c)) as PVT;

--方法二
with P as (select * from #table1)
select PVT.code, PVT.a, PVT.b, PVT.c 
     from P        pivot(count(id) for name in(a, b, c)) as PVT;
drop table #table1;

结果:

SQL Server使用PIVOT与unPIVOT实现行列转换

2、实例:

SQL Server使用PIVOT与unPIVOT实现行列转换

3、传统方式:(先汇总拼接出所需列的字符串,再动态执行转列)

先查询出要转为列的行数据,再拼接字符串。

create table #table1
    (    id int ,code varchar(10) , name varchar(20) );
go

insert into #table1 ( id,code, name ) values ( 1, 'm1','a' ), ( 2,  'm2',null ), ( 3, 'm3', 'c' ), ( 4,  'm2','d' ), ( 5,  'm1','c' );
go

select * from #table1;


declare @strCN nvarchar(100);
select @strCN = isnull(@strCN + ',', '') + quotename(name) from #table1 group by name ;
print  @strCN  --‘[a],[c],[d]'
declare @SqlStr nvarchar(1000);

set @SqlStr = N'
select * from #table1 pivot ( count(ID) for name in (' + @strCN + N') ) as PVT';
exec ( @SqlStr );

drop table #table1;

结果:

SQL Server使用PIVOT与unPIVOT实现行列转换

二、sql列转行:unPIVOT:

基本语法:

create table #table1 (id int,
code varchar(10),
name1 varchar(20),
name2 varchar(20),
name3 varchar(20));
go
insert into #table1(id, name1, name2, code, name3)
values(1, 'm1', 'a1', 'a2', 'a3'),
    (2, 'm2', 'b1', 'b2', 'b3'),
    (4, 'm1', 'c1', 'c2', 'c3');
go
select * from #table1;

--方法一
select PVT.id, PVT.code, PVT.name, PVT.val 
            from #table1 unpivot(val for name in(name1, name2, name3)) as PVT;
--方法二
with P as (select * from #table1)
select PVT.id, PVT.code, PVT.name, PVT.val 
            from P       unpivot(val for name in(name1, name2, name3)) as PVT;
drop table #table1;

结果:

SQL Server使用PIVOT与unPIVOT实现行列转换

实例:

SQL Server使用PIVOT与unPIVOT实现行列转换

到此这篇关于SQL Server使用PIVOT与unPIVOT实现行列转换的文章就介绍到这了。

SQL Server 相关文章推荐
2021-4-5课程——SQL Server查询【3】
Apr 05 SQL Server
Sql-Server数据库单表查询 4.3实验课
Apr 05 SQL Server
SqlServer 垂直分表(减少程序改动)
Apr 16 SQL Server
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
Jun 30 SQL Server
SqlServer数据库远程连接案例教程
Jul 15 SQL Server
SQL Server2019数据库备份与还原脚本,数据库可批量备份
Nov 20 SQL Server
SQL Server中常用截取字符串函数介绍
Mar 16 SQL Server
sqlserver连接错误之SQL评估期已过的问题解决
Mar 23 SQL Server
SQL Server使用导出向导功能
Apr 08 SQL Server
SQL Server的存储过程与触发器以及系统函数和自定义函数
Apr 10 SQL Server
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
May 25 SQL Server
SQL bool盲注和时间盲注详解
Jul 23 SQL Server
SQL SERVER中的流程控制语句
May 25 #SQL Server
SQL Server中搜索特定的对象
May 25 #SQL Server
SQL Server使用T-SQL语句批处理
May 20 #SQL Server
SQL Server 中的事务介绍
May 20 #SQL Server
SQL Server中锁的用法
May 20 #SQL Server
SQL Server中使用表变量和临时表
May 20 #SQL Server
SQL Server中的游标介绍
May 20 #SQL Server
You might like
PHP 超链接 抓取实现代码
2009/06/29 PHP
PHP MYSQL实现登陆和模糊查询两大功能
2016/02/05 PHP
WordPress分页伪静态加html后缀
2016/06/08 PHP
php mysql实现mysql_select_db选择数据库
2016/12/30 PHP
PHP关键特性之命名空间实例详解
2017/05/06 PHP
Yii2框架实现登录、退出及自动登录功能的方法详解
2017/10/24 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
双击滚屏-常用推荐
2006/11/29 Javascript
初窥JQuery(二) 事件机制(1)
2010/11/25 Javascript
JavaScript获取/更改文本框的值的实例代码
2013/08/02 Javascript
用jquery方法操作radio使其默认选项是否
2013/09/10 Javascript
jquery实现的伪分页效果代码
2015/10/29 Javascript
JavaScript自定义分页样式
2017/01/17 Javascript
微信小程序 sha1 实现密码加密实例详解
2017/07/06 Javascript
Bootstrap Table快速完美搭建后台管理系统
2017/09/20 Javascript
RxJS的入门指引和初步应用
2019/06/15 Javascript
windows下create-react-app 升级至3.3.1版本踩坑记
2020/02/17 Javascript
Python 爬虫多线程详解及实例代码
2016/10/08 Python
Python 操作MySQL详解及实例
2017/04/30 Python
python使用Apriori算法进行关联性解析
2017/12/21 Python
python3 图片referer防盗链的实现方法
2018/03/12 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python pands实现execl转csv 并修改csv指定列的方法
2018/12/12 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python3图片文件批量重命名处理
2019/10/31 Python
基于Python数据结构之递归与回溯搜索
2020/02/26 Python
python使用for...else跳出双层嵌套循环的方法实例
2020/05/17 Python
Old Navy加拿大官网:美式休闲服饰品牌
2017/09/26 全球购物
微软巴西官方网站:Microsoft Brasil
2019/09/26 全球购物
linux面试题参考答案(11)
2012/05/01 面试题
假日旅行社实习自我鉴定
2013/09/24 职场文书
医药专业应届毕业生求职信范文
2014/01/01 职场文书
2014年上半年工作自我评价
2014/01/18 职场文书
委托书英文
2015/01/28 职场文书
2016大学生社会实践单位评语
2015/12/01 职场文书
2016入党积极分子心得体会
2016/01/06 职场文书