通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)

简介: 在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能一、MSsqlserver中我们通常的用法

在mssql中大家都知道可以使用pivot来统计数据,实现像excel的透视表功能

一、MSsqlserver中我们通常的用法

</pre><pre name="code" class="sql">1、Sqlserver数据库测试
---创建测试表
Create table s(
    [name] nvarchar(50),
    book nvarchar(50),
    saledNumber int
)
----插入测试数据
insert into s ([name],book,saledNumber) values('小王','java从入门到精通',10);
insert into s ([name],book,saledNumber)values('小李','java从入门到精通',15);
insert into s ([name],book,saledNumber)values('小王','C#高级编程',8);
insert into s ([name],book,saledNumber)values('小李','java从入门到精通',7);
insert into s ([name],book,saledNumber)values('小王','java从入门到精通',9);
insert into s ([name],book,saledNumber)values('小李','java从入门到精通',2);
insert into s ([name],book,saledNumber)values('小王','C#高级编程',3);
insert into s ([name],book,saledNumber)values('小李','java从入门到精通',5);
insert into s ([name],book,saledNumber)values('小李','C#高级编程',5);
---1、通过case when 方式
SELECT [name], sum(case  book when 'java从入门到精通' then saledNumber else 0 end) as [java从入门到精通],sum(case  book when 'C#高级编程' then saledNumber else 0 end) as [C#高级编程], sum(saledNumber) as [sum] from s group by [name]
---2、通过pivot
select sa.name,sa.java从入门到精通,sa.C#高级编程 ,sa.java从入门到精通+sa.C#高级编程 as 合计 from s
 pivot(sum(saledNumber) for book in (java从入门到精通,C#高级编程)) sa

二、oracle 的用法

---创建测试表
Create table s(
    name varchar(50),
    book varchar(50),
    saledNumber number(9)
)
----插入测试数据
insert into s (name,book,saledNumber) values('小王','java从入门到精通',10);
insert into s (name,book,saledNumber)values('小李','java从入门到精通',15);
insert into s (name,book,saledNumber)values('小王','C#高级编程',8);
insert into s (name,book,saledNumber)values('小李','java从入门到精通',7);
insert into s (name,book,saledNumber)values('小王','java从入门到精通',9);
insert into s (name,book,saledNumber)values('小李','java从入门到精通',2);
insert into s (name,book,saledNumber)values('小王','C#高级编程',3);
insert into s (name,book,saledNumber)values('小李','java从入门到精通',5);
insert into s (name,book,saledNumber)values('小李','C#高级编程',5);
----
<pre name="code" class="sql">---1、通过case when 方式

SELECT name, sum(case book when 'java从入门到精通' then saledNumber else 0 end) as java从入门到精通 ,sum(case book when 'C#高级编程' then saledNumber else 0 end) as C#高级编程, sum(saledNumber) as sum from s group by name;

---2、通过pivot

select * from (select name,saledNumber,book from s group by name, saledNumber, book )

 pivot(sum(saledNumber) for book in ('java从入门到精通','C#高级编程')) ;

描述不清或者有错误的地方,希望大家指正修改,对于oracle中更多关于Pivot 和 Unpivot

使用简单的 SQL 以电子表格类型的交叉表报表显示任何关系表中的信息,并将交叉表中的所有数据存储到关系表中。请参考oracle官方实例

http://www.oracle.com/technetwork/cn/articles/11g-pivot-101924-zhs.html

---1、通过case when 方式
目录
打赏
0
0
0
0
235
分享
相关文章
【Azure Developer】分享两段Python代码处理表格(CSV格式)数据 : 根据每列的内容生成SQL语句
本文介绍了使用Python Pandas处理数据收集任务中格式不统一的问题。针对两种情况:服务名对应多人拥有状态(1/0表示),以及服务名与人名重复列的情况,分别采用双层for循环和字典数据结构实现数据转换,最终生成Name对应的Services列表(逗号分隔)。此方法高效解决大量数据的人工处理难题,减少错误并提升效率。文中附带代码示例及执行结果截图,便于理解和实践。
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
基于SQL Server / MySQL进行百万条数据过滤优化方案
对百万级别数据进行高效过滤查询,需要综合使用索引、查询优化、表分区、统计信息和视图等技术手段。通过合理的数据库设计和查询优化,可以显著提升查询性能,确保系统的高效稳定运行。
57 9
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
SQL Server 以其卓越的易用性和丰富的软件生态系统,在数据库行业中占据了显著的市场份额。作为一款商业数据库,外部厂商在通过解析原生日志实现增量数据捕获上面临很大的挑战,DTS 在 SQL Sever 数据通道上深研多年,提供了多种模式以实现 SQL Server 增量数据捕获。用户可以通过 DTS 数据传输服务,一键打破自建 SQL Server、RDS SQL Server、Azure、AWS等他云 SQL Server 数据孤岛,实现 SQL Server 数据源的流动。
100 0
阿里云DTS踩坑经验分享系列|DTS打通SQL Server数据通道能力介绍
【YashanDB知识库】共享利用Python脚本解决Oracle的SQL脚本@@用法
本文来自YashanDB官网,介绍如何处理Oracle客户端sql*plus中使用@@调用同级目录SQL脚本的场景。崖山数据库23.2.x.100已支持@@用法,但旧版本可通过Python脚本批量重写SQL文件,将@@替换为绝对路径。文章通过Oracle示例展示了具体用法,并提供Python脚本实现自动化处理,最后调整批处理脚本以适配YashanDB运行环境。
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
132 4
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
文章介绍了MyBatis中动态SQL的用法,包括if、choose、where、set和trim标签,以及foreach标签的详细使用。通过实际代码示例,展示了如何根据条件动态构建查询、更新和批量插入操作的SQL语句。
mybatis复习03,动态SQL,if,choose,where,set,trim标签及foreach标签的用法
SQL语句实现查询连续六天数据的方法与技巧
在数据库查询中,有时需要筛选出符合特定时间连续性条件的数据记录
SQL查询每秒的数据:技巧、方法与性能优化
id="">SQL查询功能详解 SQL(Structured Query Language,结构化查询语言)是一种专门用于与数据库进行沟通和操作的语言
添加数据到数据库的SQL语句详解与实践技巧
在数据库管理中,添加数据是一个基本操作,它涉及到向表中插入新的记录

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等