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;
测试结果为:
相关推荐
- **`LISTAGG()` 函数:** 这是Oracle 11g及以后版本引入的一个强大的聚合函数,专门用于将多行数据合并为单行字符串。它接受一个排序表达式和一个分隔符,返回所有行的合并结果。例如,假设我们有一个名为`orders`...
Oracle LISTAGG 函数是 Oracle 11.2 中引入的一种新特性,主要功能类似于 wmsys.wm_concat 函数,即将数据分组后,把指定列的数据再通过指定符号合并。LISTAGG 函数有两个参数:要合并的列名和自定义连接符号。 ...
LISTAGG 函数是一个聚合函数,可以将多行数据合并成一个字符串。LISTAGG 函数是 Oracle 11g 及更高版本中引入的,用于替代 WM_CONCAT 函数。 示例代码: ```sql SELECT sfc_no, LISTAGG(mark_operation_id, ',') ...
例如,有一个表t_col_row,其中包含多个列c1、c2、c3,需要将这些列数据合并成一个字符串数据。 可以使用LISTAGG函数来实现多列转换成字符串,例如: ```sql SELECT id, LISTAGG(c1 || ',' || c2 || ',' || c3) ...
这个函数特别适用于需要将多个行的数据合并到一行的情况,例如,当你想要在一个报告中展示员工的名字按部门和薪水排序时。 函数的基本语法如下: ```sql LISTAGG(measure_expr, delimiter) WITHIN GROUP (ORDER BY...
在Oracle数据库中,有时我们需要将同一表中多个列的值合并为一个字符串,这被称为列合并。Oracle提供了多种方法来实现这一功能,特别是在不同版本中,这些方法有所不同。以下是Oracle列合并的一些常用方法: 1. **...
`LISTAGG`函数可以将同一分组内的多个值合并成一个字符串,并按照指定的排序顺序(这里是按城市名字的顺序)。这种方法比上一种更灵活,但仍然依赖于固定的表和字段。 3. 灵活表函数法 这种方法更加灵活,但可能会...
1. **Listagg函数**:`listagg`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为单行。它接受两个参数,一个是需要聚合的列,另一个是分隔符。例如,如果有个`orders`表包含`customer_id`和`product`列,你...
`LISTAGG()`是Oracle 11g引入的一个聚合函数,用于将多行数据合并为一个字符串,特别适合于分组查询。它允许指定分隔符: ```sql SELECT column1, LISTAGG(column2, ', ') WITHIN GROUP (ORDER BY column2) FROM...
在Oracle数据库中,WM_CONCAT是一个非常实用的聚合函数,用于将一组字符串连接成一个单一的字符串,类似于SQL Server中的STRING_AGG或MySQL中的GROUP_CONCAT。然而,Oracle官方并没有提供这个函数,它是一个第三方...
此外,`LISTAGG()` 函数允许我们将一组值合并成一个字符串,这对于报告和数据展示非常有用。 三、分组和分层查询 `GROUP BY` 和 `HAVING` 子句是SQL中的基础工具,但在Oracle 10g中,你可以使用 `CUBE()`, `ROLLUP...
* 自定义聚合函数 wmsys.... * 由于聚合函数只支持一个参数,这里使用对象类型实现传入多个参数 * Oracle11g Release2版本引入了LISTAGG 函数,使得聚集连接字符串变得很容易。并且允许使用我们指定连接串中的字段顺序
这个错误通常意味着试图访问或使用`WMSYS.WM_CONCAT`函数时遇到了问题,这是一个在早期Oracle版本中提供的聚合函数,用于字符串连接,但在较新的版本中被弃用并替换为其他更安全和高效的解决方案。 `WMSYS`是Oracle...
由于ACCESS 没有oracle的listagg函数,也没有sql server这种 for xml path 这种, 要实现分组合并需要自定义一个函数,理解了 for xml path 这个就很好理解了。
在Oracle数据库中,`WM_CONCAT`函数是一个非常实用的工具,它允许我们将多个行的数据合并成一个字符串,但是这个函数在Oracle 11g R2版本之后被标记为弃用,不再推荐使用。为了应对这个问题,开发者们经常需要自定义...
在Oracle数据库中,有时我们需要将同一列中的多个值合并成一个字符串,这时就可以使用`WM_CONCAT`函数。`WM_CONCAT`是一个非标准的Oracle函数,它在Oracle 9i及以后的版本中被广泛使用,但在Oracle 11g R2版本中由于...
在Oracle数据库中,`wm_concat`函数曾是一个非常实用的工具,用于将多个行的数据合并成单个字符串,尤其在需要进行数据汇总时非常方便。然而,从Oracle 11g版本开始,出于性能和安全性的考虑,Oracle官方取消了这个...
10. LISTAGG 函数:Oracle 中的 LISTAGG 函数在 PostgreSQL 中对应的函数是 STRING_AGG。例如,在 Oracle 中的 LISTAGG(字段名, '/') 等同于 PostgreSQL 中的 STRING_AGG(字段名, '/')。 Oracle 迁移到 PostgreSQL ...
WM_CONCAT是一个非标准的Oracle函数,它能将多个字符串合并成一个单一的字符串,用分隔符(默认为逗号)连接。这个函数在早期的Oracle版本中很常用,但在11g及更高版本中被DEPRECATED,推荐使用SQL标准的CONCAT函数...