• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    从Oracle 表格行列转置说起第1/2页

    NO MONEY DAY
    1 23 1
    1 43 2
    1 -45 3
    2 42 1
    2 -10 2
    2 50 3
    3 100 8

    为了符合阅读习惯,最终报表希望是如下格式:

    NO MON TUE THR
    1 23 43 -45
    2 42 -10 50
    3      

    ------------------------

    咱们一步步来实现:

    1.运用DECODE转换行为列

    SQL:

    SELECT NO,
        DECODE(DAY,1,MONEY,'') DAY1,
        DECODE(DAY,2,MONEY,'') DAY2,
        DECODE(DAY,3,MONEY,'') DAY3
    FROM TEMP

    结果:

    NO DAY1 DAY2 DAY3
    1 23
    1 43
    1 -45
    2 42
    2 -10
    2 50
    3      

    2.按NO字段分组,并更改列名

    SQL:

    SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THR
     FROM (SELECT NO,
            DECODE(DAY, 1, MONEY,'') DAY1,
            DECODE(DAY, 2, MONEY,'') DAY2,
            DECODE(DAY, 3, MONEY,'') DAY3
         FROM TEMP)
     GROUP BY NO;

    结果:

    NO MON TUE THR
    1 23 43 -45
    2 42 -10 50
    3      

    ------------------------

    重难点归纳:

    1.DECODE缺省值设置

    DECODE语法如下:decode(条件,值1,翻译值1,值2,翻译值2,...值n,翻译值n,缺省值)

    如果缺省值由''(两个单引号)改为0,即SQL:

    SELECT NO, MAX(DAY1) MON, MAX(DAY2) TUE, MAX(DAY3) THR
     FROM (SELECT NO,
            DECODE(DAY, 1, MONEY,0) DAY1,
            DECODE(DAY, 2, MONEY,0) DAY2,
            DECODE(DAY, 3, MONEY,0) DAY3
         FROM TEMP)
     GROUP BY NO;

    结果如下(所有值为负与空值都被赋为0):

    NO MON TUE THR
    1 23 43 0
    2 42 0 50
    3 0 0 0

    2.列缺省值设置(DAY值为8的显示为'undefined')

    SQL:

    SELECT NO,MONEY,
        DECODE(DAY,1,'MON',2,'TUE',3,'THR','undefined') DAY
    FROM TEMP

    结果:

    NO MONEY DAY
    1 23 MON
    1 43 TUE
    1 -45 THR
    2 42 MON
    2 -10 TUE
    2 50 THR
    3 100 undefined

    3.行列转化在表单内数据量较大的情况下消耗较大

    原因:

    1.扫描目标数据时间开销大。

    2.GROUP BY时,数据冗余带来的多行合并。

    优点:

    表结构稳定:DAY增加新值只需增加记录,无需新增新列!

    下一页 decode()函數使用技巧
    12下一页阅读全文
    您可能感兴趣的文章:
    • Oracle实现行列转换的方法分析
    • Oracle的数据表中行转列与列转行的操作实例讲解
    • Oracle 数据库针对表主键列并发导致行级锁简单演示
    • oracle wm_concat 列转行 逗号分隔
    • Oracle逗号分隔列转行实现方法
    • Oracle CBO几种基本的查询转换详解
    • oracle中to_date详细用法示例(oracle日期格式转换)
    • 通过创建SQLServer 2005到 Oracle10g 的链接服务器实现异构数据库数据转换方案
    • MySQL转换Oracle的需要注意的七个事项
    • 将mysql转换到oracle必须了解的50件事
    • ORACLE常用数值函数、转换函数、字符串函数
    • Oracle实现行转换成列的方法
    上一篇:ORACLE 常用函数总结(80个)第1/2页
    下一篇:EXECUTE IMMEDIATE用法小结
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    从Oracle 表格行列转置说起第1/2页 从,Oracle,表格,行列,转置,