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中JSON文档型数据的查询问题解决
Jun 27 SQL Server
SqlServer数据库远程连接案例教程
Jul 15 SQL Server
SQL语句中JOIN的用法场景分析
Jul 25 SQL Server
SQL Server表分区删除详情
Oct 16 SQL Server
SQL Server中常用截取字符串函数介绍
Mar 16 SQL Server
SQL Server数据库基本概念、组成、常用对象与约束
Mar 20 SQL Server
使用MybatisPlus打印sql语句
Apr 22 SQL Server
使用 MybatisPlus 连接 SqlServer 数据库解决 OFFSET 分页问题
Apr 22 SQL Server
SQL Server中搜索特定的对象
May 25 SQL Server
SQL Server2019安装的详细步骤实战记录(亲测可用)
Jun 10 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实现把数字ID转字母ID
2013/08/12 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
用JQuery 实现AJAX加载XML并解析的脚本
2009/07/25 Javascript
用 Javascript 验证表单(form)中多选框(checkbox)值
2009/09/08 Javascript
基于jquery的lazy loader插件实现图片的延迟加载[简单使用]
2011/05/07 Javascript
js 火狐下取本地路径实现思路
2013/04/02 Javascript
jQuery动态改变图片显示大小(修改版)的实现思路及代码
2013/12/24 Javascript
jQuery多级手风琴菜单实例讲解
2015/10/22 Javascript
今天抽时间给大家整理jquery和ajax的相关知识
2015/11/17 Javascript
window.onerror()的用法与实例分析
2016/01/27 Javascript
JS学习之表格的排序简单实例
2016/05/16 Javascript
JS函数修改html的元素内容,及修改属性内容的方法
2016/10/28 Javascript
详解如何使用vue-cli脚手架搭建Vue.js项目
2017/05/19 Javascript
Vue常用的几个指令附完整案例
2018/11/06 Javascript
vue在线动态切换主题色方案
2020/03/26 Javascript
记一次vue跨域的解决
2020/10/21 Javascript
python里对list中的整数求平均并排序
2014/09/12 Python
python下os模块强大的重命名方法renames详解
2017/03/07 Python
python+influxdb+shell编写区域网络状况表
2018/07/27 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Python3.5内置模块之time与datetime模块用法实例分析
2019/04/27 Python
python 中如何获取列表的索引
2019/07/02 Python
浅析PEP570新语法: 只接受位置参数
2019/10/15 Python
pytorch实现线性拟合方式
2020/01/15 Python
html5 更新图片颜色示例代码
2014/07/29 HTML / CSS
巴西Mr. Cat在线商店:购买包包和鞋子
2019/09/08 全球购物
静态成员和非静态成员的区别
2012/05/12 面试题
幼儿园新年寄语
2014/04/03 职场文书
《翻越远方的大山》教学反思
2014/04/13 职场文书
保护环境建议书100字
2014/05/13 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
群众路线个人剖析材料
2014/10/07 职场文书
2014年度个人工作总结范文
2015/03/09 职场文书
公司员工宿舍管理制度
2015/08/07 职场文书
党员公开承诺书2016
2016/03/24 职场文书
python实现简单的名片管理系统
2021/04/26 Python