zoukankan      html  css  js  c++  java
  • 使用WMSYS.WM_CONCAT函数实现行列转换

    Introduction of WMSYS

    WMSSYS is used to store all the metadata information for Oracle Workspace Manager. This user was introduced in Oracle9i and (like most Oracle9i supporting accounts) is locked by default. The user account is locked because we want the password to be public but restrict access to the account to the SYS schema. So, to unlock the account, DBA privileges are required.

    This post will show you on how to use the method WMSSYS.WM_CONCAT to convert the row and columns in data table.

    SQL> select version from v$instance;
     
    VERSION
    -----------------
    10.2.0.1.0
     
    SQL>
    SQL> create table IDTABLE
      2  (
      3    id  number,
      4    val varchar2(20)
      5  )
      6  ;
     
    Table created
     
    SQL>
    SQL> insert into IDTABLE (ID, VAL)
      2  values (10, 'abc');
     
    1 row inserted
    SQL> insert into IDTABLE (ID, VAL)
      2  values (10, 'abc');
     
    1 row inserted
    SQL> insert into IDTABLE (ID, VAL)
      2  values (10, 'def');
     
    1 row inserted
    SQL> insert into IDTABLE (ID, VAL)
      2  values (10, 'def');
     
    1 row inserted
    SQL> insert into IDTABLE (ID, VAL)
      2  values (20, 'ghi');
     
    1 row inserted
    SQL> insert into IDTABLE (ID, VAL)
      2  values (20, 'jkl');
     
    1 row inserted
    SQL> insert into IDTABLE (ID, VAL)
      2  values (20, 'mno');
     
    1 row inserted
    SQL> insert into IDTABLE (ID, VAL)
      2  values (20, 'mno');
     
    1 row inserted
     
    SQL> select id,val from idtable;
     
            ID VAL
    ---------- --------------------
            10 abc
            10 abc
            10 def
            10 def
            20 ghi
            20 jkl
            20 mno
            20 mno
     
    8 rows selected
     
    SQL> commit;
     
    Commit complete
     
    SQL>
    SQL> SELECT ID, WMSYS.WM_CONCAT(VAL) AS ENAMES
      2    FROM IDTABLE
      3   GROUP BY ID;
     
            ID ENAMES
    ---------- --------------------------------------------------------------------------------
            10 abc,abc,def,def
            20 ghi,jkl,mno,mno
     
    SQL>
    SQL> SELECT ID, WMSYS.WM_CONCAT(DISTINCT VAL) AS ENAMES
      2    FROM IDTABLE
      3   GROUP BY ID
      4   ORDER BY ID;
     
            ID ENAMES
    ---------- --------------------------------------------------------------------------------
            10 abc,def
            20 ghi,jkl,mno
     
    SQL>
    SQL> SELECT ID, VAL, WMSYS.WM_CONCAT(VAL) OVER(PARTITION BY ID) AS ENAMES
      2    FROM IDTABLE
      3   ORDER BY ID;
     
            ID VAL               ENAMES
    ---------- -------------------- --------------------------------------------------------------------------------
            10 abc                abc,abc,def,def
            10 abc                abc,abc,def,def
            10 def                abc,abc,def,def
            10 def                abc,abc,def,def
            20 ghi                ghi,jkl,mno,mno
            20 jkl                 ghi,jkl,mno,mno
            20 mno               ghi,jkl,mno,mno
            20 mno               ghi,jkl,mno,mno
     
    8 rows selected
     
    SQL>
    SQL> SELECT ID, VAL, WMSYS.WM_CONCAT(VAL) OVER(ORDER BY ID, VAL) AS ENAMES
      2    FROM IDTABLE
      3   ORDER BY ID;
     
            ID VAL               ENAMES
    ---------- -------------------- --------------------------------------------------------------------------------
            10 abc                abc,abc
            10 abc                abc,abc
            10 def                abc,abc,def,def
            10 def                abc,abc,def,def
            20 ghi                abc,abc,def,def,ghi
            20 jkl                 abc,abc,def,def,ghi,jkl
            20 mno               abc,abc,def,def,ghi,jkl,mno,mno
            20 mno               abc,abc,def,def,ghi,jkl,mno,mno
     
    8 rows selected
  • 相关阅读:
    作为一名程序员应该具备哪些素质
    从100万个整数里找出100个最大的数
    数据库 SQL语句优化
    服务器上文件打包下载
    ThreadPoolExcutor
    几种序列化与get、set方法的关系
    idea没有错误出现红色波浪线怎么去掉?
    两个对象的属性赋值
    RandomStringUtils的使用
    IDEA中类似eclipse的workSpace的实现
  • 原文地址:https://www.cnblogs.com/mikemao/p/1501116.html
Copyright © 2011-2022 走看看