zoukankan      html  css  js  c++  java
  • Oracle列合并成行之wm_concat函数浅析


    在工作中提取数据报表时碰到了很多只有一个字段不同,其他N个字段都相同的数据,用行来显示不免觉得太过冗余,于是搜寻网络发现Oracle有个列合并成行的函数 wm_concat() 特别简单好用,所以特此记录一下。

    1. LOB类型

    先了解一下LOB类型:
    Oarcle中的LOB类型:
    在Oracle中,LOB(Large Object,大型对象)类型的字段现在用得越来越多了。因为这种类型的字段,容量大(最多能容纳4GB的数据),且一个表中可以有多个这种类型的字段,很灵活,适用于数据量非常大的业务领域(如图象、档案等)。

    LOB类型分为BLOB和CLOB两种:

    • BLOB即二进制大型对象(Binary Large Object),适用于存贮非文本的字节流数据(如程序、图象、影音等)。
    • CLOB,即字符型大型对象(Character Large Object),则与字符集相关,适于存贮文本型的数据(如历史档案、大部头著作等)。

    2. wm_concat()函数的使用

    开始新建一个表,并且插入测试数据:

    create table lp_0409_0(
    xuehao varchar2(20),
    username varchar2(50),
    kecheng varchar2(50)
    );
    
    insert into lp_0409_0 values('001','老刘','语文');
    insert into lp_0409_0 values('001','老刘','数学');
    insert into lp_0409_0 values('001','老刘','生物');
    insert into lp_0409_0 values('002','老赵','语文');
    insert into lp_0409_0 values('002','老赵','英语');
    insert into lp_0409_0 values('002','老赵','化学');
    

    查询一下:

    select * from lp_0409_0;
    

    查询结果:

    XUEHAO	USERNAME	KECHENG
    001	老刘	语文
    001	老刘	数学
    001	老刘	生物
    002	老赵	语文
    002	老赵	英语
    002	老赵	化学
    

    对kecheng字段行转列:

    select a.xuehao, a.username, wm_concat(a.kecheng)
      from lp_0409_0 a
     group by (a.xuehao, a.username);
    

    查询结果:

     XUEHAO	USERNAME	WM_CONCAT(A.KECHENG)
    001	老刘	<CLOB>
    002	老赵	<CLOB>
    

    发现查询出来的kecheng字段显示的是,没有显示想要的结果。

    这里再补充2个函数:

    • dbms_lob.substr():可转换clob字段为varchar2类型;
    • to_char():可转换字段为char类型。

    这2个函数均可以显示CLOB数据类型。

    用to_char()函数显示CLOB数据类型:

    select a.xuehao, a.username, to_char(wm_concat(a.kecheng))
      from lp_0409_0 a
     group by (a.xuehao, a.username);
    

    显示结果:

     XUEHAO	USERNAME	TO_CHAR(WM_CONCAT(A.KECHENG))
    001	老刘	语文,数学,生物
    002	老赵	语文,英语,化学
    

    用dbms_lob.substr()函数显示CLOB数据类型:

    select a.xuehao, a.username, dbms_lob.substr(wm_concat(a.kecheng))
      from lp_0409_0 a
     group by (a.xuehao, a.username);
    
     XUEHAO	USERNAME	DBMS_LOB.SUBSTR(WM_CONCAT(A.KE
    001	老刘	语文,数学,生物
    002	老赵	语文,英语,化学
    

  • 相关阅读:
    po教学001
    肖sir__ 金牌高级讲师__下载视频方法
    肖sir__ 金牌高级讲师__html下载收费音乐方法
    肖sir_少儿编程了解(001)
    【CF375D】Tree and Queries
    【CF1063F】String Journey
    【洛谷P6071】Treequery
    【ARC122E】Increasing LCMs
    【ARC122C】Calculator
    【牛客练习赛84 E】牛客推荐系统开发之标签重复度
  • 原文地址:https://www.cnblogs.com/lpeng94/p/12667288.html
Copyright © 2011-2022 走看看