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 相关文章推荐
2021-4-3课程——SQL Server查询【2】
Apr 05 SQL Server
SQLServer2019 数据库的基本使用之图形化界面操作的实现
Apr 08 SQL Server
sql字段解析器的实现示例
Jun 23 SQL Server
SQL 尚未定义空闲 CPU 条件 - OnIdle 作业计划将不起任何作用
Jun 30 SQL Server
Windows环境下实现批量执行Sql文件
Oct 05 SQL Server
SQL Server表分区删除详情
Oct 16 SQL Server
使用SQL实现车流量的计算的示例代码
Feb 28 SQL Server
SQL Server Agent 服务无法启动
Apr 20 SQL Server
SQL Server 中的事务介绍
May 20 SQL Server
SQL Server中搜索特定的对象
May 25 SQL Server
SQL Server2019安装的详细步骤实战记录(亲测可用)
Jun 10 SQL Server
在SQL Server中使用 Try Catch 处理异常的示例详解
Jul 15 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安装扩展mcrypt以及相关依赖项(PHP安装PECL扩展的方法)
2013/07/05 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
laravel5.1框架model类查询的实现方法
2019/10/08 PHP
Javascript的一种模块模式
2008/03/22 Javascript
基于JQuery的日期联动实现代码
2011/02/24 Javascript
jQuery移动和复制dom节点实用DOM操作案例
2012/12/17 Javascript
浅析Cookie中的Path与domain
2013/12/18 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
2014/06/05 Javascript
JavaScript组件开发完整示例
2015/12/15 Javascript
Vue.js实现简单ToDoList 前期准备(一)
2016/12/01 Javascript
vue-resource 拦截器使用详解
2017/02/21 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
vue+elementUI实现图片上传功能
2019/08/20 Javascript
Vue项目中数据的深度监听或对象属性的监听实例
2020/07/17 Javascript
vue祖孙组件之间的数据传递案例
2020/12/07 Vue.js
python pdb调试方法分享
2014/01/21 Python
python统计多维数组的行数和列数实例
2018/06/23 Python
在Qt中正确的设置窗体的背景图片的几种方法总结
2019/06/19 Python
解决django 新增加用户信息出现错误的问题
2019/07/28 Python
tensorflow实现训练变量checkpoint的保存与读取
2020/02/10 Python
详解使用scrapy进行模拟登陆三种方式
2021/02/21 Python
python 求两个向量的顺时针夹角操作
2021/03/04 Python
美国娱乐和流行文化商品店:FYE
2017/09/14 全球购物
西班牙美妆电商:Perfume’s Club(有中文站)
2018/08/08 全球购物
介绍一下Linux内核的排队自旋锁
2014/08/27 面试题
学生党员思想汇报范文
2014/01/09 职场文书
英语感恩演讲稿
2014/01/14 职场文书
应用英语专业自荐信
2014/01/26 职场文书
《学棋》教后反思
2014/04/14 职场文书
2014幼儿园班主任工作总结
2014/12/04 职场文书
表扬通报怎么写
2015/01/16 职场文书
小学六一儿童节活动开幕词
2016/03/04 职场文书
调解协议书范本
2016/03/21 职场文书
Mongodb 迁移数据块的流程介绍分析
2022/04/18 MongoDB
使用 Docker Compose 构建复杂的多容器App
2022/04/30 Servers