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 相关文章推荐
SqlServer: 如何更改表的文件组?(进而改变存储位置)
Apr 05 SQL Server
SQL SERVER中常用日期函数的具体使用
Apr 08 SQL Server
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
Jun 30 SQL Server
SQL Server数据库基本概念、组成、常用对象与约束
Mar 20 SQL Server
SQL Server使用导出向导功能
Apr 08 SQL Server
SQL Server数据库查询出现阻塞之性能调优
Apr 10 SQL Server
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
Apr 22 SQL Server
SQL Server中使用表变量和临时表
May 20 SQL Server
SQL Server中搜索特定的对象
May 25 SQL Server
SQL Server使用PIVOT与unPIVOT实现行列转换
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 中文字符入库或显示乱码问题的解决方法
2010/04/12 PHP
色色整理的PHP面试题集锦
2012/03/08 PHP
PHP+MySQL插入操作实例
2015/01/21 PHP
WordPress中创建用户角色的相关PHP函数使用详解
2015/12/25 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
Span元素的width属性无效果原因及解决方案
2010/01/15 Javascript
jQuery插件-jRating评分插件源码分析及使用方法
2012/12/28 Javascript
吐槽一下我所了解的Node.js
2014/10/08 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
VUE2实现事件驱动弹窗示例
2017/10/21 Javascript
jquery-file-upload 文件上传带进度条效果
2017/11/21 jQuery
jQuery 导航自动跟随滚动的实现代码
2018/05/30 jQuery
Javascript中parseInt的正确使用方式
2018/10/17 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
[03:22]DOTA2超级联赛专访单车:找到属于自己的英雄
2013/06/08 DOTA
[02:51]DOTA2英雄基础教程 风暴之灵
2013/12/23 DOTA
[02:41]《西雅图我们来了》2015国际邀请赛出征全记录
2015/07/23 DOTA
tensorflow学习笔记之简单的神经网络训练和测试
2018/04/15 Python
Python设计模式之组合模式原理与用法实例分析
2019/01/11 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
高中生自我评语大全
2014/01/19 职场文书
文案策划专业自荐信
2014/07/07 职场文书
幼儿教师暑期培训方案
2014/08/27 职场文书
竞聘演讲稿怎么写
2014/08/28 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
教育实习指导教师评语
2014/12/31 职场文书
亲属关系公证书样本
2015/01/23 职场文书
2015年节能减排工作总结
2015/05/14 职场文书
行政上诉状范文
2015/05/23 职场文书
创业开店,这样方式更合理
2019/08/26 职场文书
HTML基本元素标签介绍
2022/02/28 HTML / CSS
基于Android10渲染Surface的创建过程
2022/08/14 Java/Android