zoukankan      html  css  js  c++  java
  • 使用Pivot进行行列转换不能合并为一行的问题

    Oracle 11G新增的SQL语法Pivot用来做行列转换非常方便实用,今天使用的时候却发现一个问题。
    如果一个表中有多个数值字段,只对其中一个字段进行Sum的情况下,本来应该转换后为一行的内容,被分成了多行。

    Create table 病人预交记录T(id number(8),结算方式 varchar2(20),冲预交 number(16,5));
    Insert Into 病人预交记录T
      Select 1, '现金', 123  From Dual
      Union All
      Select 2, '支票', 1000  From Dual
      Union All
      Select 3, '信用卡', 500 From Dual;

    Select "现金", "支票", "信用卡"
    From 病人预交记录T
    Pivot(Sum(冲预交) For 结算方式 In ('现金' As "现金", '支票' As "支票", '信用卡' As "信用卡"));
    --------------------------------------------------------------------------------------------
        现金 支票 信用卡
    1 123  
    2   500
    3  1000 

    执行下面的语句,删除表中的id字段的值,查询结果如下:
    update 病人预交记录T set id=null;
    --------------------------------------------------------------------------------------------
        现金 支票 信用卡
    1 123 1000 500
    这才是实际想要的结果。

    为什么会这样呢?
    经分析发现,Pivot(Sum(冲预交)...,虽然只求了"冲预交"这个字段的值,但只要表中还有其它的数值类型,就会影响查询结果。
    很可能这是11G的一个BUG,所以,要使结果符合预期,最好使用子查询,将结果集限定为只有所求汇总字段一个数值型。

    Select "现金", "支票", "信用卡"
    From (Select 结算方式, 冲预交 From 病人预交记录T)
    Pivot(Sum(冲预交) For 结算方式 In ('现金' As "现金", '支票' As "支票", '信用卡' As "信用卡"))
    --------------------------------------------------------------------------------------------
        现金 支票 信用卡
    1 123 1000 500

  • 相关阅读:
    Python 中的Lock与RLock
    Python 自定义三方库
    Python 通过RSA实现license验证设备指纹与有效期
    Python 通过wmi获取Window服务器硬件信息
    Java List对象集合按对象属性分组、分组汇总、过滤等操作示例
    BrokenPipeError: [Errno 32] Broken pipe
    Python 通过dmidecode获取Linux服务器硬件信息
    Linux 解决E: Sub-process /usr/bin/dpkg returned an error code (1)错误
    Ubuntu 增加新用户并赋予root权限及免密的方法
    关于smali插桩
  • 原文地址:https://www.cnblogs.com/zyk/p/1416868.html
Copyright © 2011-2022 走看看