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 相关文章推荐
SQLServer2008提示评估期已过解决方案
Apr 12 SQL Server
如何有效防止sql注入的方法
May 25 SQL Server
在 SQL 语句中处理 NULL 值的方法
Jun 07 SQL Server
Sql Server之数据类型详解
Feb 28 SQL Server
SQL Server内存机制浅探
Apr 06 SQL Server
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
Apr 22 SQL Server
SQL Server中的游标介绍
May 20 SQL Server
SQL Server中锁的用法
May 20 SQL Server
SQL Server使用T-SQL语句批处理
May 20 SQL Server
SQL Server使用CROSS APPLY与OUTER APPLY实现连接查询
May 25 SQL Server
SqlServer常用函数及时间处理小结
May 08 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中显示格式化的用户输入
2006/10/09 PHP
通过PHP CLI实现简单的数据库实时监控调度
2009/07/01 PHP
使用ThinkPHP+Uploadify实现图片上传功能
2014/06/26 PHP
浅析get与post的一些特殊情况
2014/07/28 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
Swoole 5将移除自动添加Event::wait()特性详解
2019/07/10 PHP
php设计模式之状态模式实例分析【星际争霸游戏案例】
2020/03/26 PHP
JavaScript TO HTML 转换
2006/06/26 Javascript
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
js中巧用cssText属性批量操作样式
2011/03/13 Javascript
Javascript中设置默认参数值示例
2014/09/11 Javascript
jsMind通过鼠标拖拽的方式调整节点位置
2015/04/13 Javascript
js clearInterval()方法的定义和用法
2015/11/11 Javascript
javascript显示上周、上个月日期的处理方法
2016/02/03 Javascript
分享javascript、jquery实用代码段
2016/10/20 Javascript
一次围绕setTimeout的前端面试经验分享
2017/06/15 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
微信小程序中遇到的iOS兼容性问题小结
2018/11/14 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
在Vue项目中用fullcalendar制作日程表的示例代码
2019/08/04 Javascript
微信小程序 bindtap 传参的实例代码
2020/02/21 Javascript
对于Python的框架中一些会话程序的管理
2015/04/20 Python
python使用opencv按一定间隔截取视频帧
2018/03/06 Python
Python对CSV、Excel、txt、dat文件的处理
2018/09/18 Python
python整合ffmpeg实现视频文件的批量转换
2019/05/31 Python
Pytorch基本变量类型FloatTensor与Variable用法
2020/01/08 Python
tensorflow 固定部分参数训练,只训练部分参数的实例
2020/01/20 Python
Maje德国官网:法国女性成衣品牌
2017/02/10 全球购物
DBA数据库管理员JAVA程序员架构师必看
2016/02/07 面试题
管理部副部长岗位职责范文
2014/03/09 职场文书
合伙经营协议书范本
2014/09/13 职场文书
2014年人民警察入党思想汇报
2014/10/12 职场文书
2014年学生工作总结
2014/11/20 职场文书
教师调动申请报告
2015/05/18 职场文书
2016企业先进集体事迹材料
2016/02/25 职场文书
Python OpenGL基本配置方式
2022/05/20 Python