zoukankan      html  css  js  c++  java
  • Oracle 行转列小结

          近期在工作中。对行转列进行了应用,在此做一个简单的小结。


          转换步骤例如以下:

            1、创建表结构

    CREATE TABLE RowToCol 
    ( 
      ID NUMBER(10) not null, 
      USER_NAME VARCHAR2(20 CHAR), 
      COURSE VARCHAR2(20 CHAR), 
      SCORE VARCHAR2(20 CHAR)
    ) 
    

            2、插入測试数据(原始数据如图)


            



            3、行转列实现效果


            


            4、详细实现

            主要原理是利用decode函数、聚集函数(sum/max/min/avg),结合group by分组实现的,详细sql例如以下:


    select t.user_name as 姓名,
        MAX(decode(t.course,'语文',score,null)) as 语文,
        MAX(decode(t.course,'数学',score,null)) as 数学。
        MAX(decode(t.course,'英语',score,null)) as 英语
    from RowToCol t group by t.user_name  order by t.user_name
    


          
          *当要分组的值,如样例中的score列是数值型,则聚集函数能够使用sum/max/min/avg,可是字符行的仅仅能使用max/min。




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


          附注:

          decode函数:

          它是一种特有的函数计算方式,相当于计算机语言中的if...else...

           decode(条件。值1。翻译值1,值2。翻译值2,...值n。翻译值n,缺省值)

          其理解为:

           

    if (条件==值1)
     then    
    return(翻译值1)
    elsif (条件==值2)
    then    
    return(翻译值2)    
    ......
    elsif (条件==值n)
     then    
    return(翻译值n)
    else    
    return(缺省值)
    end if
    


          行转列包含行转列、列转行、多列转换成字符串、多行转换成字符串、字符串转换成多行和字符串转换成多列六种情况。假设大家有兴趣,能够进行进一步的研究。

  • 相关阅读:
    Raw图像格式
    Basler相机外部触发设置(Halcon)
    C# 丢弃串口缓冲区 Serialport.DiscardInBuffer,DiscardOutBuffer
    ASCII 码
    Xcopy 使用详解
    Qt 信息提示框QMessageBox用法
    Qt 调整图片大小适应QLabel
    C++取整
    Qt QTableView数据列宽度自适应, 横向填满表格
    Qt 事件总结(鼠标、键盘) QMouseEvent、QKeyEvent
  • 原文地址:https://www.cnblogs.com/cynchanpin/p/6872596.html
Copyright © 2011-2022 走看看