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 相关文章推荐
【HBU】数据库第四周 单表查询
Apr 05 SQL Server
SQL Server连接查询的实用教程
Apr 07 SQL Server
SQLServer2008提示评估期已过解决方案
Apr 12 SQL Server
sql字段解析器的实现示例
Jun 23 SQL Server
SQL中的三种去重方法小结
Nov 01 SQL Server
SQL Server查询某个字段在哪些表中存在
Mar 03 SQL Server
SQL Server使用导出向导功能
Apr 08 SQL Server
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
Apr 22 SQL Server
SQL Server中使用表变量和临时表
May 20 SQL Server
SQL Server使用T-SQL语句批处理
May 20 SQL Server
SQL Server使用PIVOT与unPIVOT实现行列转换
May 25 SQL Server
详解SQL报错盲注
Jul 23 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
DOTA2游戏同人动画《龙之血》导演接受采访
2021/03/05 欧美动漫
玩转虚拟域名◎+ .
2006/10/09 PHP
浅析php原型模式
2014/11/25 PHP
php使用curl打开https网站的方法
2015/06/17 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
PHP生成随机数的方法总结
2018/03/01 PHP
PHP实现基于状态的责任链审批模式详解
2019/05/31 PHP
php多进程中的阻塞与非阻塞操作实例分析
2020/03/04 PHP
JS中==与===操作符的比较
2009/03/21 Javascript
Javascript堆排序算法详解
2014/12/03 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
JS+CSS3制作炫酷的弹窗效果
2016/11/08 Javascript
学习使用jQuery表单验证插件和日历插件
2017/02/13 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
详解webpack3编译兼容IE8的正确姿势
2017/12/21 Javascript
JS实现的JSON序列化操作简单示例
2018/07/02 Javascript
JS实现显示当前日期的实例代码
2018/07/03 Javascript
vue 集成 vis-network 实现网络拓扑图的方法
2019/08/07 Javascript
javascript设计模式之迭代器模式
2020/01/30 Javascript
JS实现网页烟花动画效果
2020/03/10 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
python在指定目录下查找gif文件的方法
2015/05/04 Python
Python迭代器和生成器定义与用法示例
2018/02/10 Python
Python中dict和set的用法讲解
2019/03/28 Python
python利用re,bs4,requests模块获取股票数据
2019/07/29 Python
Python根据服务获取端口号的方法
2019/09/25 Python
tensorflow 模型权重导出实例
2020/01/24 Python
python制作一个简单的gui 数据库查询界面
2020/11/19 Python
HTML5重塑Web世界它将如何改变互联网
2012/12/17 HTML / CSS
优秀的2014年两会精神解读
2014/03/17 职场文书
祖国在我心中演讲稿400字
2014/05/04 职场文书
工作总结与自我评价
2014/09/18 职场文书
小学四年级作文之写景
2019/08/23 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
天谕手游15杯全调酒配方和调酒券的获得方式
2022/04/06 其他游戏
Python可视化神器pyecharts之绘制箱形图
2022/07/07 Python