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 08 SQL Server
SQLServer2019 数据库的基本使用之图形化界面操作的实现
Apr 08 SQL Server
mybatis调用sqlserver存储过程返回结果集的方法
May 08 SQL Server
利用 SQL Server 过滤索引提高查询语句的性能分析
Jul 15 SQL Server
SQL Server表分区删除详情
Oct 16 SQL Server
SQL Server2019数据库备份与还原脚本,数据库可批量备份
Nov 20 SQL Server
SQL Server数据库查询出现阻塞之性能调优
Apr 10 SQL Server
使用MybatisPlus打印sql语句
Apr 22 SQL Server
SQL Server 中的事务介绍
May 20 SQL Server
SQL Server中搜索特定的对象
May 25 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 htmlspecialchars()与shtmlspecialchars()函数的深入分析
2013/06/05 PHP
php简单截取字符串代码示例
2016/10/19 PHP
ThinkPHP框架结合Ajax实现用户名校验功能示例
2019/07/03 PHP
php生成随机数/生成随机字符串的方法小结【5种方法】
2020/05/27 PHP
JavaScript中的对象化编程
2008/01/16 Javascript
JQuery里选择超链接的实现代码
2011/05/22 Javascript
jQuery+jRange实现滑动选取数值范围特效
2015/03/14 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
在js中做数字字符串补0(js补零)
2017/03/25 Javascript
vue+ElementUI实现订单页动态添加产品数据效果实例代码
2017/07/13 Javascript
关于Angularjs中跨域设置白名单问题
2018/04/17 Javascript
微信小程序实现长按删除图片的示例
2018/05/18 Javascript
angularjs 动态从后台获取下拉框的值方法
2018/08/13 Javascript
详解关于element el-button使用$attrs的一个注意要点
2018/11/09 Javascript
NodeJs操作MongoDB教程之分页功能以及常见问题
2019/04/09 NodeJs
jquery实现掷骰子小游戏
2019/10/24 jQuery
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
python简单实现刷新智联简历
2016/03/30 Python
解决python升级引起的pip执行错误的问题
2018/06/12 Python
用Python+OpenCV对比图像质量的几种方法
2019/07/15 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
通过实例学习Python Excel操作
2020/01/06 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
Python 字典中的所有方法及用法
2020/06/10 Python
pandas to_excel 添加颜色操作
2020/07/14 Python
python Cartopy的基础使用详解
2020/11/01 Python
python爬虫工具例举说明
2020/11/30 Python
Selenium关闭INFO:CONSOLE提示的解决
2020/12/07 Python
澳大利亚排名第一的儿童在线玩具商店:Toy Galaxy
2018/10/06 全球购物
int和Integer有什么区别
2013/05/25 面试题
爱心捐款倡议书
2014/04/14 职场文书
家长对老师的评语
2014/04/18 职场文书
新学期红领巾广播稿
2014/10/04 职场文书
国际贸易实训报告
2014/11/05 职场文书
2014幼儿园中班工作总结
2014/11/10 职场文书
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
2021/06/30 SQL Server