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

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

一、MSsqlserver中我们通常的用法

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);
----

---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

				
时间: 2024-10-19 00:09:24

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

SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)

SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5.在SELECT子句中使用子查询 6.WITH子句 子查询(进阶) 7.分析函数 8.行列转换 9.设置数据层次 八.行列转换 pivot和unpivot函数是Oracle 11g增加的新函数,利用此函数可以实现行列转换操作 按照原始方式实现,使用通用函数中的DECODE()函数 列字段的处理 SQ

excel2013做数据透视表

excel2013做数据透视表 Excel最新版更新到2013,相比2003.2007和2010,2013的excel界面方面有一定变化,在操作方面也有一定的便捷性.那么如何使用excel2013做一些简单的数据汇总.透视,以及在数据透视表中进行计算.展现等呢,请大家跟着我一起来一起操作吧. 1 首先打开你要用来做数据透视表的excel文件,如图我自己弄了一个样本示例文件,预先选择好你要做数据透视的区域,如我的示例文件我选择A1:F24区域,记得要连带表头一起选择. 2 然后点击最顶端的菜单"插

sql server快速删除整个数据库表和存储过程

情况:在远程数据库删除表执行太慢,表过多,数据库无权删除 结果:保留空数据库 方法:利用sql语句,查询网络文摘解决. 说明: 有些有约束,不能直接delete,需要先删除所有约束,语句: DECLARE c1 cursor for select 'alter table ['+ object_name(parent_obj) + '] drop constraint ['+name+']; ' from sysobjects where xtype = 'F' open c1 declare

锋利的SQL-SQL Server的表旋转(行列转换)

所谓表旋转,就是将表的行转换为列,或是将表的列转换为行,这是从SQL Server 2005开始提供的新技术.因此,如果希望使用此功能,需要将数据库的兼容级别设置为90.表旋转在某些方面也是解决了表的数据存储和实际需要之间的矛盾.例如,图9-4所示的是一个典型的产品销售统计表,这种格式虽然便于阅读,但是在进行数据表存储的时候却并不容易管理,产品销售数据表通常需要设计成图9-5所示的结构.这样就带来一个问题,用户既希望数据容易管理,又希望能够生成一种能够容易阅读的表格数据,这时候就可以使用表旋转技

数据库的行列转换问题

在平常的工作中或者面试中,我们可能有遇到过数据库的行列转换问题.今天我们就来讨论下. 1.创建表 首先我们来创建一张表. sql语句: --1. 创建数据表 if OBJECT_ID('Score') is not null drop table Score create table Score ( 姓名 nvarchar(128), 课程 nvarchar(128), 分数 int ) insert into Score values('张三','语文',98) insert into Sco

SQL Server中行列转换 Pivot UnPivot

SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PIVOT(聚合函数(列) FOR 列 in (-) )AS P 完整语法: table_source PIVOT( 聚合函数(value_column) FOR pivot_column IN(<column_list>) ) UNPIVOT用于将列明转为列值(即列转行),在SQL Server 2

flask-sqlalchemy 迁移数据(生成数据库表)与 查询数据

1, 生成表 db.Model主要用于数据库的增删改查操作, 构建表交给db.Table完成 安装 pip install flask-migrate from datetime import datetime from flask_sqlalchemy import SQLAlchemy from sqlalchemy.dialects.mysql import TINYINT, BIGINT, VARCHAR, CHAR, DATETIME, INTEGER # 使用原生sqlalchemy

用SqlBulkCopy批量插入数据到SqlServer数据库表中

首先创建一个数据库连接类:SQLHelper using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Data.SqlClient; using System.Data; namespace insetData { public class SQLHelper { public static readonly string Strconn = "Data

将Excel中的数据批量导入数据库表

private boolean import_to_database(String excel_path) throws BiffException, IOException, HsException{ File file = new File(excel_path);//根据文件名创建一个文件对象 Workbook wb = Workbook.getWorkbook(file);//从文件流中取得Excel工作区对象 Sheet sheet = wb.getSheet(0);//从工作区中取得