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
SqlServer 垂直分表(减少程序改动)
Apr 16 SQL Server
mybatis调用sqlserver存储过程返回结果集的方法
May 08 SQL Server
SQL 窗口函数实现高效分页查询的案例分析
May 21 SQL Server
SQL SERVER实现连接与合并查询
Feb 24 SQL Server
Sql Server之数据类型详解
Feb 28 SQL Server
SQL CASE 表达式的具体使用
Mar 21 SQL Server
Sql Server 行数据的某列值想作为字段列显示的方法
Apr 20 SQL Server
SQL使用复合索引实现数据库查询的优化
May 25 SQL Server
SQL解决未能删除约束问题drop constraint
May 30 SQL Server
详解SQL报错盲注
Jul 23 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 和 MySQL 开发的 8 个技巧
2007/01/02 PHP
thinkphp文件引用与分支结构用法实例
2014/11/26 PHP
PHP命名空间与自动加载类详解
2018/09/04 PHP
ThinkPHP框架整合微信支付之Native 扫码支付模式二图文详解
2019/04/09 PHP
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
JavaScript中的replace()方法使用详解
2015/06/06 Javascript
AngularJS打开页面隐藏显示表达式用法示例
2016/12/25 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
基于BootStrap的文本编辑器组件Summernote
2017/10/27 Javascript
如何安装控制器JavaScript生成插件详解
2018/10/21 Javascript
Vue项目中使用better-scroll实现一个轮播图自动播放功能
2018/12/03 Javascript
JavaScript HTML DOM元素 节点操作汇总
2019/07/29 Javascript
layui(1.0.9)文件上传upload,前后端的实例代码
2019/09/26 Javascript
JQuery常用简单动画操作方法回顾与总结
2019/12/07 jQuery
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
python读写ini配置文件方法实例分析
2015/06/30 Python
在Django中创建URLconf相关的通用视图的方法
2015/07/20 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
python利用sklearn包编写决策树源代码
2017/12/21 Python
Python数据分析之双色球统计单个红和蓝球哪个比例高的方法
2018/02/03 Python
详解Python使用tensorflow入门指南
2018/02/09 Python
python bmp转换为jpg 并删除原图的方法
2018/10/25 Python
使用pandas读取文件的实现
2019/07/31 Python
Python 转换文本编码实现解析
2019/08/27 Python
对Keras中predict()方法和predict_classes()方法的区别说明
2020/06/09 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
英国在线定做百叶窗网站:Make My Blinds
2020/08/17 全球购物
医学生自我鉴定范文
2014/03/26 职场文书
七夕情人节促销方案
2014/06/07 职场文书
2014年教师节红领巾广播稿
2014/09/10 职场文书
2015年社区平安建设工作总结
2015/05/13 职场文书
格林童话读书笔记
2015/06/30 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
学生会主席任命书
2015/09/21 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
关于maven依赖 ${xxx.version}报错问题
2022/01/18 Java/Android