Oracle Pivot学习心得
今天在做一个查询报表需要将多行的查询结果转换成一行,数据格式如下
ID Type Parameter Value Machine_NO Operator UpdateTime
1 111111111111 DS after 155.780000 P2-2222 88888888 2014/6/5 11:52:13
2 111111111111 DS airbag 0.850000 P2-2222 88888888 2014/6/5 11:52:40
3 111111111111 DS before 163.570000 P1-1111 00000000 2014/6/5 11:30:05
4 111111111111 DS delta 22.990000 P2-2222 88888888 2014/6/5 11:52:25
5 111111111111 IJ after 163.570000 P1-1111 00000000 2014/6/5 11:29:57
6 111111111111 IJ before 133.640000 P1-1111 00000000 2014/6/5 11:21:51
7 111111111111 IJ delta 29.9300001 P1-1111 00000000 2014/6/5 11:30:21
需要将这7行数据转换成2行数据,将同一ID同一Type不同的parameter的Value值放到同一行中。
如下的结果

如果用拼接的方法来完成这个任务虽然能达到同样的效果,但是SQL非常长不易理解。而且SQL语句的执行效率很低很浪费数据库资源。
在ORACLE 中有一个函数(Pivot)可以很容易的达到这个效果
用法Select * From 表名
PIVOT
(
SUM('要合并的列1'),MAX('要合并的列2'),....FOR 将值转换成列的列名 IN
(列值1,列值2,列值3,列值4....)
)
从用法中可以看出sum,max是配合PIVOT聚合函数,聚合函数必须要有。
实际用例:
select *
from (
select ID,
Type,
parameter,
value,
machine_no,
Operator,
update_time
from tableName)
pivot(
max(value) as value,
max(machine_no) as machine_no,
max(Operator) as Operator,
max(update_time) as update_time
for parameter in(
'before' as Before,
'after' as After,
'delta' as Delta,
'airbag' as AirBag )
)
where ID= '111111111111'
在转换过程中生成的新列名是由上面红色字组合成的,生成的新列数为4*4=16列。例:Before_Value Before_Machine_No,Before_Operator,
下图是执行计划

Oracle Pivot学习心得的更多相关文章
- 我的MYSQL学习心得(六) 函数
我的MYSQL学习心得(六) 函数 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类 ...
- 我的MYSQL学习心得(十四) 备份和恢复
我的MYSQL学习心得(十四) 备份和恢复 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) ...
- Java学习心得之 Linux下搭建Java环境
作者:枫雪庭 出处:http://www.cnblogs.com/FengXueTing-px/ 欢迎转载 Java学习心得之 Linux下搭建Java环境 1.前言2.JDK安装3.配置环境变量4. ...
- 个人git链接和git学习心得总结
个人git链接和git学习心得总结 个人git链接: https://github.com/hanzhaoyan Git 是 Linux 的创始人 Linus Torvalds 开发的开源和免费的版本 ...
- python pandas库——pivot使用心得
python pandas库——pivot使用心得 2017年12月14日 17:07:06 阅读数:364 最近在做基于python的数据分析工作,引用第三方数据分析库——pandas(versio ...
- MYSQL学习心得(转)
适合有SQL SERVER或ORACLE基础的人看,有对比,学习更有效果 转自:http://www.cnblogs.com/lyhabc/ 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习 ...
- 我的MYSQL学习心得(一) 简单语法
我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(二) 数据类型宽度
我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
- 我的MYSQL学习心得(三) 查看字段长度
我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...
随机推荐
- Java Integer类分析
public static final int MIN_VALUE = 0x80000000; -2^31 public static final int MAX_VALUE = 0x7ff ...
- No row with the given identifier exists[ArtProject.Domains.Users#2]
产生此问题的原因: 有两张表,table1和table2. 产生此问题的原因就是table1里做了关联<one-to-one>或者<many-to-on ...
- ♫【jQuery】detach
Jquery empty() remove() detach() 方法的区别 <!DOCTYPE html> <html> <head> <meta char ...
- 综合查询员工和datetime.now和datetime.today区别
一:综合查询图 二:EmployeeListWindow.cs代码 using System; using System.Collections.Generic; using System.Compo ...
- Vim笔记
复制多行: v 可视化,选择多行,然后yy复制.
- 【索引】用PS3手柄在安卓设备上玩游戏系列
谈安卓游戏对手柄的支持:http://www.cnblogs.com/duxiuxing/p/3729802.html 连接手柄和设备:http://www.cnblogs.com/duxiuxing ...
- WCF扩展系列 - 行为扩展(Behaviors)
原文地址:http://www.cnblogs.com/Creator/archive/2011/05/21/2052687.html 这个系列的第一部分将会重点关注WCF行为(behaviors), ...
- [操作系统] OS X Yosemite U盘制作
话不多说,DiskMakerX,大小6.3M,下载地址:http://www.liondiskmaker.com/,然后准备好U盘和从官网下的Yosemite系统就可以开始了. DiskMaker X ...
- [Java] JavaMail 发送 html 格式、带附件的邮件
本案例演示发送 html 格式,可带附件的邮件发送.发送纯文本邮件的例子可参照上一篇博文JavaMail 简单案例. EmailHelper, Email 的帮助类,向帮助类提供 SMTP 服务器域名 ...
- Detect the Virus - ZOJ 3430(恶心的自动机)
题目大意:给你一些病毒的特征码,然后再给一些文本,判断每个文本有多少种病毒,不过给的字符串都是加密处理过的,给的每个字符串都有对应一个64以内的一个数(题目里面那个表就是),然后可以把这个64以内的这 ...