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数据库单表查询 4.3实验课
Apr 05 SQL Server
SQLServer2019 数据库环境搭建与使用的实现
Apr 08 SQL Server
SQL Server作业失败:无法确定所有者是否有服务器访问权限的解决方法
Jun 30 SQL Server
SqlServer数据库远程连接案例教程
Jul 15 SQL Server
Spark SQL 2.4.8 操作 Dataframe的两种方式
Oct 16 SQL Server
SQL SERVER触发器详解
Feb 24 SQL Server
使用SQL实现车流量的计算的示例代码
Feb 28 SQL Server
sql时间段切分实现每隔x分钟出一份高速门架车流量
Feb 28 SQL Server
SQLServer RANK() 排名函数的使用
Mar 23 SQL Server
SQL Server 忘记密码以及重新添加新账号
Apr 26 SQL Server
SQL中的连接查询详解
Jun 21 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
Android ProgressBar进度条和ProgressDialog进度框的展示DEMO
2013/06/19 PHP
php使用APC实现实时上传进度条功能
2015/10/26 PHP
细品javascript 寻址,闭包,对象模型和相关问题
2009/04/27 Javascript
利用jQuery接受和处理xml数据的代码(.net)
2011/03/28 Javascript
Node.js实现Excel转JSON
2015/04/24 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
jquery插件NProgress.js制作网页加载进度条
2015/06/05 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
js 转义字符及URI编码详解
2017/02/28 Javascript
AngularJS 购物车全选/取消全选功能的实现方法
2017/08/14 Javascript
vue二级菜单导航点击选中事件的方法
2018/09/12 Javascript
vue 添加和编辑用同一个表单,el-form表单提交后清空表单数据操作
2020/08/03 Javascript
使用vue构建多页面应用的示例
2020/10/22 Javascript
一分钟学会JavaScript中的try-catch
2020/12/14 Javascript
[01:29:31]VP VS VG Supermajor小组赛胜者组第二轮 BO3第一场 6.2
2018/06/03 DOTA
Python模块学习 re 正则表达式
2011/05/19 Python
Python使用新浪微博API发送微博的例子
2014/04/10 Python
python发送邮件功能实现代码
2016/07/15 Python
Python+matplotlib实现华丽的文本框演示代码
2018/01/22 Python
python 使用poster模块进行http方式的文件传输到服务器的方法
2019/01/15 Python
Tensorflow 多线程设置方式
2020/02/06 Python
Keras实现支持masking的Flatten层代码
2020/06/16 Python
python爬虫中抓取指数的实例讲解
2020/12/01 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
Under Armour安德玛英国官网:美国高端运动科技品牌
2018/09/17 全球购物
Can a struct inherit from another class? (结构体能继承类吗)
2014/07/22 面试题
省文明单位申报材料
2014/05/08 职场文书
教师求职信
2014/06/17 职场文书
煤矿安全知识竞赛活动总结
2014/07/07 职场文书
教师作风整改措施思想汇报
2014/10/12 职场文书
党的作风建设心得体会
2014/10/22 职场文书
倡议书格式及范文
2015/04/29 职场文书
解决Mysql中的innoDB幻读问题
2022/04/29 MySQL
Python编写车票订购系统 Python实现快递收费系统
2022/08/14 Python
MySQL索引失效十种场景与优化方案
2023/05/08 MySQL