`

一个关于oracle将多列行合并为单行的函数listagg

阅读更多


select u.user_name,
       (
        select listagg(g.org_name, '-') within group(order by rownum desc )
        from   org g
        start  with g.org_id = u.org_id
        connect by prior g.porg_id = g.org_id
        and rownum < 4
        )
from   users u
where u.USER_ID = 'wj';

 

说明:将指定用户的信息,与该用户的机构信息遍历后的值合并的sql;

附上表,和实验结果

org 机构表

user 用户表

导出的sql如下

--------------------------------------------------------
--  文件已创建 - 星期日-八月-23-2015   
--------------------------------------------------------
--------------------------------------------------------
--  DDL for Table ORG
--------------------------------------------------------

  CREATE TABLE "HR"."ORG" 
   (	"ORG_ID" VARCHAR2(32 BYTE) DEFAULT SYS_GUID(), 
	"ORG_NAME" VARCHAR2(32 BYTE), 
	"PORG_ID" VARCHAR2(32 BYTE)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;
--------------------------------------------------------
--  DDL for Table USERS
--------------------------------------------------------

  CREATE TABLE "HR"."USERS" 
   (	"USER_ID" VARCHAR2(32 BYTE) DEFAULT sys_guid(), 
	"USER_NAME" VARCHAR2(32 BYTE), 
	"ORG_ID" VARCHAR2(32 BYTE)
   ) SEGMENT CREATION IMMEDIATE 
  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;

   COMMENT ON COLUMN "HR"."USERS"."USER_ID" IS '????';
   COMMENT ON COLUMN "HR"."USERS"."USER_NAME" IS '??????';
   COMMENT ON COLUMN "HR"."USERS"."ORG_ID" IS '????????id';
   COMMENT ON TABLE "HR"."USERS"  IS '??????';
REM INSERTING into HR.ORG
SET DEFINE OFF;
Insert into HR.ORG (ORG_ID,ORG_NAME,PORG_ID) values ('3644F8D3841047A2B9477D039876F1B9','四川总部',null);
Insert into HR.ORG (ORG_ID,ORG_NAME,PORG_ID) values ('D676FBE02AD04614AF5446908CC95264','四川分中心成都','3644F8D3841047A2B9477D039876F1B9');
Insert into HR.ORG (ORG_ID,ORG_NAME,PORG_ID) values ('CEC3BEEFB74C4510939343CE019049DA','成都营业部','D676FBE02AD04614AF5446908CC95264');
Insert into HR.ORG (ORG_ID,ORG_NAME,PORG_ID) values ('dEC3BEEFB74C4510939343CE019049DA','营业寿险部','CEC3BEEFB74C4510939343CE019049DA');
Insert into HR.ORG (ORG_ID,ORG_NAME,PORG_ID) values ('CrC3BEEFB74C4510939343CE019049DA','寿险分管经理','dEC3BEEFB74C4510939343CE019049DA');
Insert into HR.ORG (ORG_ID,ORG_NAME,PORG_ID) values ('CwC3BEEFB74C4510939343CE019049DA','寿险分管小组','dEC3BEEFB74C4510939343CE019049DA');
REM INSERTING into HR.USERS
SET DEFINE OFF;
Insert into HR.USERS (USER_ID,USER_NAME,ORG_ID) values ('zs','张珊','CwC3BEEFB74C4510939343CE019049DA');
Insert into HR.USERS (USER_ID,USER_NAME,ORG_ID) values ('yzx','杨正弦','CwC3BEEFB74C4510939343CE019049DA');
Insert into HR.USERS (USER_ID,USER_NAME,ORG_ID) values ('hsl','和侍郎','CrC3BEEFB74C4510939343CE019049DA');
Insert into HR.USERS (USER_ID,USER_NAME,ORG_ID) values ('xh','徐汇','CrC3BEEFB74C4510939343CE019049DA');
Insert into HR.USERS (USER_ID,USER_NAME,ORG_ID) values ('wj','王建','CEC3BEEFB74C4510939343CE019049DA');
Insert into HR.USERS (USER_ID,USER_NAME,ORG_ID) values ('wp','吴博','CEC3BEEFB74C4510939343CE019049DA');
--------------------------------------------------------
--  DDL for Index ORG_ID_PK
--------------------------------------------------------

  CREATE UNIQUE INDEX "HR"."ORG_ID_PK" ON "HR"."ORG" ("ORG_ID") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;
--------------------------------------------------------
--  DDL for Index USER_ID_PK
--------------------------------------------------------

  CREATE UNIQUE INDEX "HR"."USER_ID_PK" ON "HR"."USERS" ("USER_ID") 
  PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS" ;
--------------------------------------------------------
--  Constraints for Table ORG
--------------------------------------------------------

  ALTER TABLE "HR"."ORG" ADD CONSTRAINT "ORG_ID_PK" PRIMARY KEY ("ORG_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE;
  ALTER TABLE "HR"."ORG" MODIFY ("ORG_NAME" NOT NULL ENABLE);
  ALTER TABLE "HR"."ORG" MODIFY ("ORG_ID" NOT NULL ENABLE);
--------------------------------------------------------
--  Constraints for Table USERS
--------------------------------------------------------

  ALTER TABLE "HR"."USERS" ADD CONSTRAINT "USER_ID_PK" PRIMARY KEY ("USER_ID")
  USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 COMPUTE STATISTICS 
  STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
  PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
  TABLESPACE "USERS"  ENABLE;
  ALTER TABLE "HR"."USERS" MODIFY ("ORG_ID" NOT NULL ENABLE);
  ALTER TABLE "HR"."USERS" MODIFY ("USER_NAME" NOT NULL ENABLE);
  ALTER TABLE "HR"."USERS" MODIFY ("USER_ID" NOT NULL ENABLE);
--------------------------------------------------------
--  Ref Constraints for Table ORG
--------------------------------------------------------

  ALTER TABLE "HR"."ORG" ADD CONSTRAINT "PORG_ID_PK" FOREIGN KEY ("PORG_ID")
	  REFERENCES "HR"."ORG" ("ORG_ID") ENABLE;

 

测试结果为:

http://dl2.iteye.com/upload/attachment/0111/1568/aea03d80-337b-3168-8a06-70e752658d22.png

  • 大小: 5.6 KB
2
1
分享到:
评论

相关推荐

    【Oracle】LISTAGG函数的使用.pdf

    【Oracle】LISTAGG函数的使用.pdf

    Oracle函数之LISTAGG

    近在学习的过程中,发现一个挺有意思的函数,它可实现对列值的拼接。下面我们来看看其具体用法。  用法:  对其作用,官方文档的解释如下:  For a specified measure, LISTAGG orders data within each ...

    ACCESS 分组合并

    由于ACCESS 没有oracle的listagg函数,也没有sql server这种 for xml path 这种, 要实现分组合并需要自定义一个函数,理解了 for xml path 这个就很好理解了。

    Oracle10g自定义聚合函数(字符串拼接)

    * 自定义聚合函数 wmsys.... * 由于聚合函数只支持一个参数,这里使用对象类型实现传入多个参数 * Oracle11g Release2版本引入了LISTAGG 函数,使得聚集连接字符串变得很容易。并且允许使用我们指定连接串中的字段顺序

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    他认为对于SQL的学习是永无止境的,相信每一个查询Oracle数据库的人都需要精通SQL语言,才能写出高效的查询。他参与本书的编写就是为了帮助别人实现这一目标。 目录 封面 -11 封底 -10 扉页 -9 版权 -8 版权声明 -7...

    oracle收集

    oracle日常收集内容,平时工作积累listagg行转列

    oracle材料

    含listagg函数 (行列转换) ,Oracle-SQL-Developer-使用简要说明,oracle导入导出语句,Oracle远程登录,rownum分组排序,wm_concat列转行

    oracle 10g 11g 12c 19c 21c 23c 重建wm-concat函数脚本

    oracle 10g 11g 12c 19c 21c 23c 重建wm_concat函数脚本 varchar类型clob类型报错不用listagg ORA-01790: 表达式必须具有与对应表达式相同的数据类型 ORA-00904: “WM_CONCAT“: invalid identifier 解决 owmaggrb....

    12C开始_wm_concat函数.sql

    Oracle从12C版本开始,不支持wm_concat函数,我们可以采取的办法有使用listagg函数代替wm_concat函数,或者为了减小修改程序的工作量,可以通过手工创建wm_concat函数来解决这个问题。

    SQL删除多列语句的写法

    最近在写SQL过程中发现需要对一张表结构作调整(此处是SQL Server),其中需要删除多列,由于之前都是一条SQL语句删除一列,于是猜想是否可以一条语句同时删除多列,如果可以,怎么写法? 第一次猜想如下(注意:...

    数据结构————二差排序树标准写法

    二差排序树树,关于数据结构的二差排序树,仅供参考!!!!!!!!!!!!!!!!!!!

    Oracle SQL实用讲解,最基本最实用的相关讲解

    WITH –-小九九算法 t_base AS (SELECT LEVEL AS lv FROM dual CONNECT BY LEVEL ), ...SELECT listagg(t_join.text, ' ') within GROUP(ORDER BY t_join.lv_b) AS m99 FROM t_join GROUP BY t_join.lv_a;

    SQL袖珍参考手册(第3版)

    Functions new to Oracle, such as LISTAGG, NTH_VALUE, and more PostgreSQL’s support of recursive WITH and some window functions DB2 syntax and datatypes, some compatible with Oracle MySQL features ...

    C#俄罗斯方块程序设计

    文档说明了基本的俄罗斯方块的设计过程以及代码!

    Access数据库-List列表框控件应用

    Access数据库-List列表框控件应用

    data_access:使用内存数据库的可扩展、低延迟、高并发数据访问层实现

    要添加到内置函数列表中的 VoltDB 存储过程,例如:像 group_concat(又名 listagg)这样的 UDF 像爆炸的 UDTF 通过 JDBC 动态执行 DDL 将多个 SQL 语句绑定到一个事务中创建表插入少量记录(使用 Insert into ...

    【SQL 必知必会】 性能篇 01. 如何考虑数据库调优

    数据库内部情况监控:活动会话(Active Session)监控是一个重要的指标。通过它,你可以清楚地了解数据库当前是否处于非常繁忙的状态,是否存在 SQL 堆积等 事务,锁等待进行监控。 2.1 第一步,根据业务选择适合的...

    psftpp:PA和PeopleSoft

    PSFT_PP 修改后的PeopleSoft现金会计解决方案PeopleSoft中的收入确认如何在PeopleSoft中创建新的业务单元如何在PSQuery中使用LISTAGG什么是PS Financial GatewayPeopleCode / SQL可能会很方便地在Integration Broker...

Global site tag (gtag.js) - Google Analytics