3,491
社区成员
发帖
与我相关
我的任务
分享
--针对你这个需求,有三种方法可以实现
--方法一、使用wmsys.wm_concat Oracle版本要求10g及以上
--方法二、使用sys_connect_by_path Oracle版本在9i及以下
--方法三、使用自定义函数
--我来给你写给自定义函数实现的例子
--创建自定义函数
create or replace function my_concat(p_userid in ceshi.userid%type) --输入参数:p_userid
return varchar2
is
result varchar2(4000); --定义变量,返回值
begin
for temp_cursor in (select another_name from ceshi where userid=p_userid) loop --此处在游标FOR循环中查询userid对应的another_name
result :=result||temp_cursor.another_name||';';
end loop;
result := rtrim(result,';'); --去掉最后一个分号
return result;
end;
/
SELECT DISTINCT userid,username,my_concat(userid) another_name FROM ceshi ;
结果:
USERID USERNAME ANOTHER_NAME
------------ ------------------ ---------------------------------
1001 张三 小张;张老板;张总;张先生
1002 李四 小李;李老板;李先生
1003 王五 小王;王哥
CREATE TABLE CESHI
(
PRIMARY_ID NUMBER NOT NULL,
USERID NUMBER(6),
USERNAME VARCHAR2(32),
ANOTHER_NAME VARCHAR2(400)
);
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (1,1001,'张三','小张');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (2,1001,'张三','张老板');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (3,1001,'张三','张总');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (4,1001,'张三','张先生');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (5,1002,'李四','小李');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (6,1002,'李四','李老板');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (7,1002,'李四','李先生');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (8,1003,'王五','小王');
INSERT INTO CESHI(PRIMARY_ID,USERID,USERNAME,ANOTHER_NAME) VALUES (9,1003,'王五','王哥');
select userid,username,wm_concat(another_name)
from ceshi
group by userid,username
SQL> select USERID,USERNAME,
2 replace(wm_concat(ANOTHER_NAME),',',';') ANOTHER_NAME
3 from CESHI
4 group by USERID,USERNAME
5 /
USERID USERNAME ANOTHER_NAME
---------- -------------------------------- ---------------------------------
1001 张三 小张;张老板;张总;张先生
1002 李四 小李;李老板;李先生
1003 王五 小王;王哥
--10g或以上版本支持wm_concat()
SQL> select userid,username,wm_concat(another_name)
2 from ceshi group by userid,username;
USERID USERNAME
---------- --------------------------------
WM_CONCAT(ANOTHER_NAME)
-----------------------------------------------------------------
1001 张三
小张,张老板,张总,张先生
1002 李四
小李,李老板,李先生
1003 王五
小王,王哥
ame