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基本使用和简单的CRUD操作
Apr 05 SQL Server
Sql-Server数据库单表查询 4.3实验课
Apr 05 SQL Server
sql字段解析器的实现示例
Jun 23 SQL Server
SQL Server代理:理解SQL代理错误日志处理方法
Jun 30 SQL Server
万能密码的SQL注入漏洞其PHP环境搭建及防御手段
Sep 04 SQL Server
SQL Server查询某个字段在哪些表中存在
Mar 03 SQL Server
SQL Server中常用截取字符串函数介绍
Mar 16 SQL Server
详解在SQLPlus中实现上下键翻查历史命令的功能
Mar 18 SQL Server
如何使用SQL Server语句创建表
Apr 12 SQL Server
SQL Server 忘记密码以及重新添加新账号
Apr 26 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合并数组+与array_merge的区别分析
2010/08/01 PHP
CI框架中zip类应用示例
2014/06/17 PHP
yii2 RBAC使用DbManager实现后台权限判断的方法
2016/07/23 PHP
javascript 模式设计之工厂模式详细说明
2010/05/10 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
iframe子父页面调用js函数示例
2013/11/07 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
js获取UserControl内容为拼html时提供方便
2014/11/02 Javascript
javascript实现按回车键切换焦点
2015/02/09 Javascript
jQuery实现首页图片淡入淡出效果的方法
2015/06/10 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
理解Javascript的call、apply
2015/12/16 Javascript
AngularJS 入门教程之HTML DOM实例详解
2016/07/28 Javascript
React Native 截屏组件的示例代码
2017/12/06 Javascript
深入浅析Vue.js计算属性和侦听器
2018/05/05 Javascript
Vuex 使用及简单实例(计数器)
2018/08/29 Javascript
利用chrome浏览器进行js调试并找出元素绑定的点击事件详解
2021/01/30 Javascript
vue工程全局设置ajax的等待动效的方法
2019/02/22 Javascript
详解Vue-cli3 项目在安卓低版本系统和IE上白屏问题解决
2019/04/14 Javascript
Python 条件判断的缩写方法
2008/09/06 Python
Python中处理字符串之isalpha()方法的使用
2015/05/18 Python
Python Pywavelet 小波阈值实例
2019/01/09 Python
python 去除二维数组/二维列表中的重复行方法
2019/01/23 Python
python 实现将文件或文件夹用相对路径打包为 tar.gz 文件的方法
2019/06/10 Python
python自动循环定时开关机(非重启)测试
2019/08/26 Python
python实现人机猜拳小游戏
2020/02/03 Python
无需压缩软件,用python帮你操作压缩包
2020/08/17 Python
西班牙香水和化妆品购物网站:Arenal Perfumerías
2019/03/01 全球购物
YBF Beauty官网:美丽挚友,美国知名彩妆品牌
2020/11/22 全球购物
企业业务员岗位职责
2014/03/14 职场文书
辞职书格式样本
2015/02/26 职场文书
个人年底工作总结
2015/03/10 职场文书
运动会通讯稿100字
2015/07/20 职场文书
员工手册董事长致辞
2015/07/29 职场文书
小学生法制教育心得体会
2016/01/14 职场文书
学习新党章心得体会2016
2016/01/15 职场文书