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注入的方法
May 25 SQL Server
SQL语句中JOIN的用法场景分析
Jul 25 SQL Server
Spark SQL 2.4.8 操作 Dataframe的两种方式
Oct 16 SQL Server
sql server 累计求和实现代码
Feb 28 SQL Server
Sql Server之数据类型详解
Feb 28 SQL Server
SQL Server实现分页方法介绍
Mar 16 SQL Server
详解在SQLPlus中实现上下键翻查历史命令的功能
Mar 18 SQL Server
sqlserver连接错误之SQL评估期已过的问题解决
Mar 23 SQL Server
如何使用SQL Server语句创建表
Apr 12 SQL Server
SQL Server Agent 服务无法启动
Apr 20 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的autoload自动加载机制使用说明
2010/12/28 PHP
PHP大文件分割上传 PHP分片上传
2017/08/28 PHP
Laravel中10个有用的用法小结
2019/05/06 PHP
js操作Xml(向服务器发送Xml,处理服务器返回的Xml)(IE下有效)
2009/01/30 Javascript
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
DIV外区域Click后关闭DIV的实现代码
2011/12/21 Javascript
Firefox中使用outerHTML的2种解决方法
2014/06/07 Javascript
js实现屏幕自适应局部代码分享
2015/01/30 Javascript
浅谈js中的三种继承方式及其优缺点
2016/08/10 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
详解A标签中href=""的几种用法
2017/08/20 Javascript
JavaScript中var、let、const区别浅析
2018/06/24 Javascript
JavaScript事件对象event用法分析
2018/07/27 Javascript
基于vue-cli npm run build之后vendor.js文件过大的解决方法
2018/09/27 Javascript
微信小程序视图控件与bindtap之间的问题的解决
2019/04/08 Javascript
nodejs搭建本地服务器并访问文件操作示例
2019/05/11 NodeJs
jquery 验证用户名是否重复代码实例
2019/05/14 jQuery
10种JavaScript最常见的错误(小结)
2019/06/21 Javascript
微信小程序实现点击按钮后修改颜色
2019/12/05 Javascript
[02:17]2016国际邀请赛中国区预选赛VG战队领队采访
2016/06/26 DOTA
[01:57]2018DOTA2亚洲邀请赛赛前采访-iG
2018/04/03 DOTA
Python对象的深拷贝和浅拷贝详解
2014/08/25 Python
python连接MySQL数据库实例分析
2015/05/12 Python
Python抓取百度查询结果的方法
2015/07/08 Python
Django框架获取form表单数据方式总结
2020/04/22 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
三星印度官网:Samsung印度
2019/08/03 全球购物
《听鱼说话》教学反思
2014/02/15 职场文书
入党积极分子评语
2014/05/04 职场文书
煤矿安全生产标语
2014/06/06 职场文书
2015共产党员公开承诺书
2015/01/22 职场文书
周一早安温馨问候祝福语!
2019/07/15 职场文书
代码解析React中setState同步和异步问题
2021/06/03 Javascript
Django中session进行权限管理的使用
2021/07/09 Python
html5实现点击弹出图片功能
2021/07/16 HTML / CSS
Python使用PyYAML库读写yaml文件的方法
2022/04/06 Python