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 相关文章推荐
SQL Server连接查询的实用教程
Apr 07 SQL Server
SQLServer2019 数据库环境搭建与使用的实现
Apr 08 SQL Server
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
Jun 30 SQL Server
数据库之SQL技巧整理案例
Jul 07 SQL Server
SqlServer数据库远程连接案例教程
Jul 15 SQL Server
SQL语句中JOIN的用法场景分析
Jul 25 SQL Server
SQL写法--行行比较
Aug 23 SQL Server
SQL Server2019数据库备份与还原脚本,数据库可批量备份
Nov 20 SQL Server
SQL Server Agent 服务无法启动
Apr 20 SQL Server
SQL Server 忘记密码以及重新添加新账号
Apr 26 SQL Server
一次SQL查询优化原理分析(900W+数据从17s到300ms)
Jun 10 SQL Server
SQL Server数据库备份和恢复数据库的全过程
Jun 14 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实现对两个数组进行减法操作的方法
2015/04/17 PHP
如何把php5.3版本升级到php5.4或者php5.5
2015/07/31 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
php+redis实现多台服务器内网存储session并读取示例
2017/01/12 PHP
PHP+Mysql+Ajax实现淘宝客服或阿里旺旺聊天功能(前台页面)
2017/06/16 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
javascript 隔行换色函数代码
2010/10/24 Javascript
深入了解javascript中的prototype与继承
2013/04/14 Javascript
jquery制作弹窗提示窗口代码分享
2014/03/02 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
js中substring和substr两者区别和使用方法
2015/11/09 Javascript
九种原生js动画效果
2015/11/11 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
js时间查询插件使用详解
2017/04/07 Javascript
vue如何截取字符串
2019/05/06 Javascript
微信小程序间使用navigator跳转传值问题实例分析
2020/03/27 Javascript
基于javascript实现移动端轮播图效果
2020/12/21 Javascript
python 将字符串转换成字典dict的各种方式总结
2018/03/23 Python
Python+OpenCV实现图像融合的原理及代码
2018/12/03 Python
python用pandas数据加载、存储与文件格式的实例
2018/12/07 Python
python语言线程标准库threading.local解读总结
2019/11/10 Python
python模拟实现斗地主发牌
2020/01/07 Python
PIL.Image.open和cv2.imread的比较与相互转换的方法
2020/06/03 Python
PyTorch之nn.ReLU与F.ReLU的区别介绍
2020/06/27 Python
HTML5拖放API实现拖放排序的实例代码
2017/05/11 HTML / CSS
Pop In A Box英国:Funko POP搪胶公仔
2019/05/27 全球购物
美发活动策划书
2014/01/14 职场文书
违纪检讨书2000字
2014/02/08 职场文书
领导接待方案
2014/03/13 职场文书
艺术教育实施方案
2014/05/03 职场文书
端午节演讲稿
2014/05/23 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
检讨书范文大全
2015/05/07 职场文书
redis客户端实现高可用读写分离的方式详解
2021/07/04 Redis