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
SQL写法--行行比较
Aug 23 SQL Server
SQLServer之常用函数总结详解
Aug 30 SQL Server
使用SQL实现车流量的计算的示例代码
Feb 28 SQL Server
MySQL 中如何归档数据的实现方法
Mar 16 SQL Server
SQL CASE 表达式的具体使用
Mar 21 SQL Server
SQL Server内存机制浅探
Apr 06 SQL Server
MSSQL基本语法操作
Apr 11 SQL Server
SQL Server #{}可以防止SQL注入
May 11 SQL Server
SQL Server中锁的用法
May 20 SQL Server
SQL Server中T-SQL标识符介绍与无排序生成序号的方法
May 25 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
各种战术和打法的原创者
2020/03/04 星际争霸
PHP的一个完整SMTP类(解决邮件服务器需要验证时的问题)
2006/10/09 PHP
10条PHP编程习惯助你找工作
2008/09/29 PHP
PHP合并两个数组的两种方式的异同
2012/09/14 PHP
Thinkphp无限级分类代码
2015/11/11 PHP
表单填写时用回车代替TAB的实现方法
2007/10/09 Javascript
关于取不到由location.href提交而来的上级页面地址的解决办法
2009/07/30 Javascript
jquery 常用操作整理 基础入门篇
2009/10/14 Javascript
让ie运行js时提示允许阻止内容运行的解决方法
2010/10/24 Javascript
jQuery阻止冒泡和HTML默认操作
2010/11/17 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
利用了jquery的ajax实现二级联互动菜单
2013/12/02 Javascript
js获取上传文件大小示例代码
2014/04/10 Javascript
简单的jQuery入门指引
2015/07/28 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
基于jQuery实现火焰灯效果导航菜单
2017/01/04 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
NodeJs项目中关闭ESLint的方法
2018/08/09 NodeJs
原生js检测页面加载完毕的实例
2018/09/11 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
[09:13]2014DOTA2国际邀请赛 中国区预选赛coser表演
2014/05/23 DOTA
python函数的5种参数详解
2017/02/24 Python
Python3实现发送QQ邮件功能(文本)
2017/12/15 Python
Python检测网络延迟的代码
2018/05/15 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
Python自动化办公Excel模块openpyxl原理及用法解析
2020/11/05 Python
python 用opencv实现霍夫线变换
2020/11/27 Python
Loreto Gallo英国:欧洲领先的在线药房
2021/01/21 全球购物
小学生新学期寄语
2014/01/19 职场文书
领导失职检讨书
2014/02/24 职场文书
2014年元旦感言
2014/03/06 职场文书
社会实践活动总结范文
2014/07/03 职场文书
大学第二课堂活动总结
2014/07/08 职场文书
失职检讨书大全
2015/01/26 职场文书
JS封装cavans多种滤镜组件
2022/02/15 Javascript