通过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
通过sql做数据透视表,数据库表行列转换(pivot和Unpivot用法)(一)的更多相关文章
- sql行列转换PIVOT与unPIVOT
基本语法 select * from Mould pivot ( count(ID)for ProductTypeCode in ( [FC], [RCU], [RCD] )) as PVT; wit ...
- SQL Fundamentals: 子查询 || 行列转换(PIVOT,UNPIVOT,DECODE),设置数据层次(LEVEL...CONNECT BY)
SQL Fundamentals || Oracle SQL语言 子查询(基础) 1.认识子查询 2.WHERE子句中使用子查询 3.在HAVING子句中使用子查询 4.在FROM子句中使用子查询 5 ...
- excel2013做数据透视表
excel2013做数据透视表 Excel最新版更新到2013,相比2003.2007和2010,2013的excel界面方面有一定变化,在操作方面也有一定的便捷性.那么如何使用excel20 ...
- SQL语句的使用,SELECT - 从数据库表中获取数据 UPDATE - 更新数据库表中的数据 DELETE - 从数据库表中删除数据 INSERT INTO - 向数据库表中插入数据
SQL DML 和 DDL 可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL). SQL (结构化查询语言)是用于执行查询的语法. 但是 SQL 语言也包含用于更新. ...
- jsp+servlet上传excel并将数据导入到数据库表的实现方法
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...
- SQL查询数据并插入新表
SQL查询数据并插入新表 --如果接受数据导入的表已经存在 insert into 表 select * from tablename --如果导入数据并生成表 select * into 表 fro ...
- SQL Server中行列转换 Pivot UnPivot
SQL Server中行列转换 Pivot UnPivot PIVOT用于将列值旋转为列名(即行转列),在SQL Server 2000可以用聚合函数配合CASE语句实现 PIVOT的一般语法是:PI ...
- 绝对干货,教你4分钟插入1000万条数据到mysql数据库表,快快进来
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- 插入1000万条数据到mysql数据库表
转自:https://www.cnblogs.com/fanwencong/p/5765136.html 我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入100 ...
随机推荐
- easyui tree在struts1中的使用
前段时间写过类似的功能,开发环境是struts2,jdk1.6,tomcat 而这次是修改N年前的项目 项目的开发环境为struts1,jdk1.4,weblogic8,比较过时所以就增加了使用eas ...
- HTML5要点_CSS(三)
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- class ResultServletContextListener implements ServletContextListener
package com.management.spring; import java.io.BufferedReader; import java.io.IOException; import jav ...
- WaterWave
WaterWave.rar
- 手动配置Ubuntu Linux系列3-缺省网关和主机名
上一篇讲到[原创]手动配置Ubuntu Linux的DHCP客户端,这里再说一下配置静态IP地址的方法. 仍然是编辑 interfaces文件. $ sudo vi /etc/network/ ...
- 信号之sigpending函数
sigpending函数返回信号集,其中的各个信号对于调用进程是阻塞的而不能递送,因而也一定是当前未决的.该信号集通过set参数返回.(这些信号是已经产生的信号,但因为信号屏蔽字中对其设置了屏蔽位,从 ...
- tar备份系统
一.概述 前几天我通过SSH正在调戏汤姆猫(tomcat)的时候,服务器上CentOS突然挂了.开机grub,使用光盘linux rescue修复提示找不到linux分区,然后想mount硬盘备份系统 ...
- ExtJs 继承 和 插件 示例
Ext.ns('Ext.ux'); function btn(){ alert(this.id); }; var panel_plugs = {//定义插件 init : function(panel ...
- Number of failed login attempts exceeds threshold value
OEM发出好多告警,Number of failed login attempts exceeds threshold value. profile当前配置10次失败就会锁定user 查看下,dba_ ...
- MAC 环境下初始化mysql root 密码
1. 关掉mysql服务,打开系统设置最后的mysql,然后将mysql先关掉 2. 生成一个文件命名mysql-init,文件中放入:一句话,这句话不同版本不一样,如下:(括号里面不包含) alte ...