精华内容
下载资源
问答
  • wm_concat函数用法

    千次阅读 2019-01-24 15:41:08
    oracle中wm_concat函数用法 今天工作中用到遇到一个问题,当一个表是用来描述一个事物时,其字段一般都是这个事物的各个属性,当我们需要获取这个事物时如果将这个表中所有属性获取(即将表中一行转换为一列) 1、原...

    oracle中wm_concat函数用法

    今天工作中用到遇到一个问题,当一个表是用来描述一个事物时,其字段一般都是这个事物的各个属性,当我们需要获取这个事物时如果将这个表中所有属性获取(即将表中一行转换为一列)

    1、原表:SELECT * FROM dept
    部门表:包含这三个属性,想要获取所有的Dname

    2、目标效果:
    推荐使用第二个语句:不同的版本可能会有差别,我自己安装的oracle9i都可以支持
    SELECT a.deptno, wm_concat(a.dname) FROM dept a group by a.deptno
    **SELECT a.deptno,to_char(wm_concat(a.dname)) FROM dept a group by a.deptno

    在这里插入图片描述
    我们将所有部门10的名字放在了部门10,部门20的放在了部门20
    wm_concat作用:将列转换为一行并以逗号分隔;

    展开全文
  • wm_concat函数 用法

    万次阅读 2016-12-29 13:56:18
    首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用 准备测试数据 SQL> create table test(id number,name varchar2(20)); SQL...
    首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用
    准备测试数据
    SQL> create table test(id number,name varchar2(20));
    SQL> insert into test values(1,'a');
    SQL> insert into test values(1,'b');
    SQL> insert into test values(1,'c');
    SQL> insert into test values(2,'d');
    SQL> insert into test values(2,'e');
    SQL> commit;
    效果1 : 行转列
    SQL> select wm_concat(name) from test;
    WM_CONCAT(NAME)
    -------------------------------------------------------------------------
    a,b,c,d,e
    效果2: 把结果里的逗号替换成"|"
    SQL> select replace(wm_concat(name),',','|') from test;
    REPLACE(WM_CONCAT(NAME),',','|')
    -----------------------------------------------------------------------
    a|b|c|d|e
    效果3:按ID分组合并name
    SQL> select id,wm_concat(name) name from test group by id;
    ID NAME
    ---------- ------------------------------
    1 a,b,c
    2 d,e
    懒人扩展用法:
    案例:我要写一个视图,类似"create or replace view as select 字段1,...字段50 from tablename" ,基表有50多个字段,要是靠手工写太麻烦了,有没有什么简便的方法? 当然有了,看我如果应用wm_concat来让这个需求变简单
    SQL> select 'create or replace view as select '|| wm_concat(column_name) || ' from dept'from user_tab_columns where table_name='DEPT';
    'CREATEORREPLACEVIEWASSELECT'||WM_CONCAT(COLUMN_NAME)||'FROMDEPT'
    --------------------------------------------------------------------------------
    create or replace view as select DEPTNO,DNAME,LOC from dept

    展开全文
  • oracle wm concat函数 用于列转行 逗号分隔

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

    也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

                   

    wm_concat函数

     

    首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用

    准备测试数据

     

    SQL> create table test(id number,name varchar2(20));

    SQL> insert into test values(1,'a');

    SQL> insert into test values(1,'b');

    SQL> insert into test values(1,'c');

    SQL> insert into test values(2,'d');

    SQL> insert into test values(2,'e');

     

    SQL> commit;

     

    效果1 : 行转列

     

    SQL> select wm_concat(name) from test;

    WM_CONCAT(NAME)

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

    a,b,c,d,e

     

    效果2: 把结果里的逗号替换成"|"

     

    SQL> select replace(wm_concat(name),',','|') from test;

    REPLACE(WM_CONCAT(NAME),',','|')

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

    a|b|c|d|e

     

     

    效果3:按ID分组合并name

     

    SQL> select id,wm_concat(name) name from test group by id;

    ID NAME

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

    1 a,b,c

    2 d,e

     

    懒人扩展用法:

    案例:我要写一个视图,类似"create or replace view as select 字段1,...字段50 from tablename" ,基表有50多个字段,要是靠手工写太麻烦了,有没有什么简便的方法? 当然有了,看我如果应用wm_concat来让这个需求变简单

     

    SQL> select 'create or replace view as select '|| wm_concat(column_name) || ' from dept'from user_tab_columns where table_name='DEPT';

    'CREATEORREPLACEVIEWASSELECT'||WM_CONCAT(COLUMN_NAME)||'FROMDEPT'

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

    create or replace view as select DEPTNO,DNAME,LOC from dept



    Oracle9i添加 wm_concat函数(转)


    一: 

    创建type头 

    create or replace type string_sum_obj as object ( 
    --聚合函数的实质就是一个对象 
         sum_string varchar2(4000), 
         static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number, 
         --对象初始化 
         member function ODCIAggregateIterate(self in out string_sum_obj, value in varchar2) return number, 
         --聚合函数的迭代方法(这是最重要的方法) 
         member function ODCIAggregateMerge(self in out string_sum_obj, v_next in string_sum_obj) return number, 
         --当查询语句并行运行时,才会使用该方法,可将多个并行运行的查询结果聚合 
          
         member function ODCIAggregateTerminate(self in string_sum_obj, return_value out varchar2 ,v_flags in number) return number 
         --终止聚集函数的处理,返回聚集函数处理的结果. 



    创建type具体 
    create or replace type body string_sum_obj is 
         static function ODCIAggregateInitialize(v_self in out string_sum_obj) return number is 
         begin 
             v_self := string_sum_obj(null); 
             return ODCICONST.Success; 
         end; 
         member function ODCIAggregateIterate(self in out string_sum_obj, value in varchar2) return number is 
         begin 
              /* 连接,解决逗号分隔第一个字母是逗号的问题 */    
               if not self.sum_string is null then 
              self.sum_string := self.sum_string ||','|| value; 
              else 
              self.sum_string := self.sum_string || value; 
              end if; 
              return ODCICONST.Success; 
              /* 最大值 */ 
              if self.sum_string<value then 
                  self.sum_string:=value; 
              end if; 
              /* 最小值 */ 
              if self.sum_string>value then 
           self.sum_string:=value;           
              end if; 
               
              return ODCICONST.Success; 
         end; 
         member function ODCIAggregateMerge(self in out string_sum_obj, v_next in string_sum_obj) return number is 
         begin 
              /* 连接 */    
              self.sum_string := self.sum_string || v_next.sum_string; 
              return ODCICONST.Success; 
              /* 最大值 */ 
              if self.sum_string<v_next.sum_string then 
                  self.sum_string:=v_next.sum_string; 
              end if; 

              /* 最小值 */ 
              if self.sum_string>v_next.sum_string then 
                  self.sum_string:=v_next.sum_string;           
              end if; 
               
              return ODCICONST.Success; 
         end; 
         member function ODCIAggregateTerminate(self in string_sum_obj, return_value out varchar2 ,v_flags in number) return number is 
         begin 
              return_value:= self.sum_string; 
              return ODCICONST.Success; 
         end; 
    end; 


    创建函数 
    create or replace function wm_concat(value Varchar2) return Varchar2 
         parallel_enable aggregate using string_sum_obj; 

    二: 

    先创建这个类型 

    create or replace type strcat_type as object ( 
        cat_string varchar2(4000), 
        static function ODCIAggregateInitialize(cs_ctx In Out strcat_type) return number, 
        member function ODCIAggregateIterate(self In Out strcat_type,value in varchar2) return number, 
        member function ODCIAggregateMerge(self In Out strcat_type,ctx2 In Out strcat_type) return number, 
        member function ODCIAggregateTerminate(self In Out strcat_type,returnValue Out varchar2,flags in number) return number 


    缺少类型体内容: 

    .... 


    然后创建这个函数 

    CREATE OR REPLACE FUNCTION strcat(input varchar2 ) 
    RETURN varchar2 
    PARALLEL_ENABLE AGGREGATE USING strcat_type; 


    几个用法: 

    9i: SYS_CONNECT_BY_PATH 函数 



    SQL> select id, replace(wmsys.wm_concat(rmak), ',', '') from test group by id; 

            ID REPLACE(WMSYS.WM_CONCAT(RMAK), 
    ---------- -------------------------------------------------------------------------------- 
             9 timggg 
            21 littlefff 
            23 tom 



    SQL> select * from idtable; 

            ID NAME 
    ---------- ------------------------------ 
            10 ab 
            10 bc 
            10 cd 
            20 hi 
            20 ij 
            20 mn 

    6 rows selected 
    SQL> select id,wmsys.wm_concat(name) name from idtable 
      2  group by id; 

            ID NAME 
    ---------- -------------------------------------------------------------------------------- 
            10 ab,bc,cd 
            20 hi,ij,mn 

    SQL> select id,wmsys.wm_concat(name) over (order by id) name from idtable; 

            ID NAME 
    ---------- -------------------------------------------------------------------------------- 
            10 ab,bc,cd 
            10 ab,bc,cd 
            10 ab,bc,cd 
            20 ab,bc,cd,hi,ij,mn 
            20 ab,bc,cd,hi,ij,mn 
            20 ab,bc,cd,hi,ij,mn 

    6 rows selected 

    SQL> select id,wmsys.wm_concat(name) over (order by id,name) name from idtable; 

            ID NAME 
    ---------- -------------------------------------------------------------------------------- 
            10 ab 
            10 ab,bc 
            10 ab,bc,cd 
            20 ab,bc,cd,hi 
            20 ab,bc,cd,hi,ij 
            20 ab,bc,cd,hi,ij,mn 

    6 rows selected 

    个人觉得这个用法比较有趣. 

    SQL> select id,wmsys.wm_concat(name) over (partition by id) name from idtable; 

            ID NAME 
    ---------- -------------------------------------------------------------------------------- 
            10 ab,bc,cd 
            10 ab,bc,cd 
            10 ab,bc,cd 
            20 hi,ij,mn 
            20 hi,ij,mn 
            20 hi,ij,mn 

    6 rows selected 

    SQL> select id,wmsys.wm_concat(name) over (partition by id,name) name from idtable; 

            ID NAME 
    ---------- -------------------------------------------------------------------------------- 
            10 ab 
            10 bc 
            10 cd 
            20 hi 
            20 ij 
            20 mn 

    6 rows selected


               

    给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

    这里写图片描述
    展开全文
  • oracle wm_concat函数 用法

    千次阅读 2018-03-08 19:59:17
    首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用 准备测试数据 SQL&gt; create table test(id number,...
    1. 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何应用  
    2. 准备测试数据  
    3. SQL> create table test(id number,name varchar2(20));  
    4. SQL> insert into test values(1,'a');  
    5. SQL> insert into test values(1,'b');  
    6. SQL> insert into test values(1,'c');  
    7. SQL> insert into test values(2,'d');  
    8. SQL> insert into test values(2,'e');  
    9. SQL> commit;  
    10. 效果1 : 行转列  
    11. SQL> select wm_concat(namefrom test;  
    12. WM_CONCAT(NAME)  
    13. -------------------------------------------------------------------------  
    14. a,b,c,d,e  
    15. 效果2: 把结果里的逗号替换成"|"  
    16. SQL> select replace(wm_concat(name),',','|'from test;  
    17. REPLACE(WM_CONCAT(NAME),',','|')  
    18. -----------------------------------------------------------------------  
    19. a|b|c|d|e  
    20. 效果3:按ID分组合并name  
    21. SQL> select id,wm_concat(namename from test group by id;  
    22. ID NAME  
    23. ---------- ------------------------------  
    24. 1 a,b,c  
    25. 2 d,e  
    26. 懒人扩展用法:  
    27. 案例:我要写一个视图,类似"create or replace view as select 字段1,...字段50 from tablename" ,基表有50多个字段,要是靠手工写太麻烦了,有没有什么简便的方法? 当然有了,看我如果应用wm_concat来让这个需求变简单  
    28. SQL> select 'create or replace view as select '|| wm_concat(column_name) || ' from dept'from user_tab_columns where table_name='DEPT';  
    29. 'CREATEORREPLACEVIEWASSELECT'||WM_CONCAT(COLUMN_NAME)||'FROMDEPT'  
    30. --------------------------------------------------------------------------------  
    31. create or replace view as select DEPTNO,DNAME,LOC from dept  
    展开全文
  • oracle wm concat函数,用于列转行,逗号分隔
  • oracle wm_concat函数用法

    2015-10-29 15:09:50
    wmsys.wm_concat函数,它的作用是以','链接字符 例子如下: SQL> create table idtable (id number,name varchar2(30)); Table c...
  • oracle wmsys.wm_concat 函数,它的作用是以','链接字符。例子如下:SQL> create table idtable (id number,name varchar2(30));Table createdSQL> insert into idtable values(10,'ab');1 row insertedSQL>...
  • wmsys.wm_concat 函数用法

    2015-01-05 17:09:02
    统计信息,需要将多行数据合并在一行中,于是使用wmsys.wm_concat函数 简单例子: 表结构 SQL> desc test; 名称 ...
  • Oracle中的wm_concat函数用法

    万次阅读 2019-01-30 14:52:34
    但是在数据查询时候,有时候又希望将所有权利人信息一起展示,这里可能就会用到Oracle的wm_concat函数 1.示例数据 2. 示例语句 select qlrid,wm_concat(qlr) as qlr,wm_concat(qlrzjh) as qlrzjh from qlr t...
  • WMSYS.WM_CONCAT函数用法 wmsys.wm_concat:列转行 select wmsys.wm_concat(name) from test;   wm_concat:行转列 select wm_concat(name) from test;   我们通过 10g 所提供的 WMSYS.WM_CONCAT 函数...
  • oracle 的wmsys.wm_concat函数用法 原文网址:http://space.itpub.net/?13387766/viewspace-448841 今天才发现了wmsys.wm_concat这个有趣有用的函数,它的作用是以','链接字符。 例子如下: SQL> ...
  • wmsys.wm_concat函数用法

    2013-01-16 10:43:08
    今天在论坛的一个回帖里看到一个朋友用了wmsys.wm_concat这个函数,自己还不知道怎么用,就去百度了一下,大概内容如下。 ===================================================================================...
  • wm_concat函数

    2019-09-30 23:29:04
    wm_concat函数 wm_concat函数 一般分类 — 作者 zzy020128 @ 12:21 首先让我们来看看这个神奇的函数wm_concat(列名),该函数可以把列值以","号分隔起来,并显示成一行,接下来上例子,看看这个神奇的函数如何...
  • 无意中碰到wmsys.wm_concat这个函数很好很强大. 怕有天忘了先记下来自己懒得写例子,网上抄来一片 谢谢你了 哥们. 原文网址:http://space.itpub.net/?13387766/viewspace-448841 今天才发现了wmsys.wm_concat...
  • 我们通过 10g 所提供的 WMSYS.WM_CONCAT 函数可以完成 行转列的效果 例子如下: 1.准备数据: create table testtable (id number,name varchar2(30)); insert into testtable values(10,'ab'); insert into ...
  • ,查了所以资料,最后发现是oracle中wm_concat()函数造成的。 wm_concat()运行后的返回结果根据oracle的版本不同而会字段类型不同,在oracle11g中返回clob型,在oracle10g中返回varchar型。 解决办法如下: select ...
  • oracle listagg和wm_concat函数

    万次阅读 2017-07-06 23:12:22
    对于将一列多值合并成一行问题,oracle提供了wmsys.wm_concat和listagg函数处理此问题,下面我们以emp表中数据为例,看看两函数使用方法 假设我们需要统计每种job下面有哪些员工,要求在一行显示员工姓名,首先看...
  • oracle中使用wm_concat函数方法及弊端(解决办法) 2017年11月11日 11:32:40专心写bug阅读数:22542 该函数在10版本推出,可以把列值以英文逗号分隔起来并显示成一行,例子: 1.SQL>createtabletest(idnumber,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,166
精华内容 866
关键字:

wmconcat函数用法