博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle Pivot学习心得
阅读量:5248 次
发布时间:2019-06-14

本文共 1604 字,大约阅读时间需要 5 分钟。

  今天在做一个查询报表需要将多行的查询结果转换成一行,数据格式如下

  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,

下图是执行计划

 

 

 

 

转载于:https://www.cnblogs.com/zhubin1314521/p/3770712.html

你可能感兴趣的文章
Kruskal基础最小生成树
查看>>
浅谈算法和数据结构: 一 栈和队列
查看>>
Java内部类详解
查看>>
【hdu 1429】胜利大逃亡(续)
查看>>
图论-次短路求法
查看>>
What's New for Visual C# 6.0
查看>>
ExtJs学习笔记之ComboBox组件
查看>>
关于收费软件
查看>>
getopt_long
查看>>
TensorFlow MNIST CNN 代码
查看>>
javascript之Style物
查看>>
JSON跨域解决方案收集
查看>>
图的深度优先遍历
查看>>
C# 之 提高WebService性能大数据量网络传输处理
查看>>
[bzoj1004] [HNOI2008] Cards
查看>>
原生HttpClient详细使用示例
查看>>
几道面试题
查看>>
Factory Design Pattern
查看>>
python中贪婪与非贪婪
查看>>
guava API整理
查看>>