第一张表是这样的zb_Code
zb_Id------zb_Name
--01----------aa
--02----------bb
--03----------cc
第二张表 zb_Data
data_Id------data_Name
--01----------01,02,03
--02----------02,03
--03----------01,03 结果要是这个样子:
--1----------01,02,03------aa,bb,cc
--2----------02,03------bb,cc
--3----------01,03------aa,cc
第二张表的data_Name是第一张表的zb_Id集合
写个函数
zb_Id------zb_Name
--01----------aa
--02----------bb
--03----------cc
第二张表 zb_Data
data_Id------data_Name
--01----------01,02,03
--02----------02,03
--03----------01,03 结果要是这个样子:
--1----------01,02,03------aa,bb,cc
--2----------02,03------bb,cc
--3----------01,03------aa,cc
第二张表的data_Name是第一张表的zb_Id集合
写个函数
解决方案 »
- MATERIALIZED VIEW 删除数据
- TUXEDO10gR3 CMDTUX_CAT:819怎么解决
- 用pl/sql developer 导入pde文件时报 ora-01480 赋值变量缺少空后缀
- 关于oracle备份
- 关于oracle里的自增序列和存储过程
- 急:PL/SQL 登陆 Oracle 10g 提示 ORA-12154:TNS:无法解析指定的连接标识符
- 在pl/sql中,如何将类型为date的字段的值变为YYYY-MM-DD这样的格式?
- 刚装完oracle,问题就来了,求助
- 急,我oracle安装后一切正常,但我重启动后出现下列问题,求助!!
- 怎樣修改table表格空間 initial的大小?
- data guard如何恢复备库控制文件?
- java delete DB2 问题,高手进
CREATE OR REPLACE FUNCTION fun_analyze(prm_id IN VARCHAR2) RETURN VARCHAR2 IS
TYPE t_tid IS TABLE OF VARCHAR2(200) INDEX BY PLS_INTEGER;
TYPE t_name IS TABLE OF VARCHAR2(200) INDEX BY PLS_INTEGER; arr_id t_tid;
arr_name t_name;
v_tempid VARCHAR2(20);
v_temp VARCHAR2(20);
n_number INTEGER := 0;
v_name VARCHAR2(200);
BEGIN
FOR i IN 1 .. length(prm_id || ',') LOOP
v_temp := substr(prm_id || ',', i, 1);
IF v_temp != ',' THEN
v_tempid := v_tempid || v_temp;
ELSE
n_number := n_number + 1;
arr_id(n_number) := v_tempid;
v_tempid := '';
END IF;
END LOOP; FOR j IN 1 .. arr_id.COUNT LOOP
SELECT zb_name INTO arr_name(j) FROM zb_code WHERE zb_id = arr_id(j);
v_name := v_name || ',' || arr_name(j);
END LOOP; RETURN substr(v_name, 2);
END fun_analyze;
然后执行:
SELECT ROWNUM,data_name,fun_analyze(data_name) FROM zb_data;
得到想要的结果!
以"," 连接两列!
;
INSERT INTO t1 VALUES('01','aa')
;
INSERT INTO t1 VALUES('02','bb')
;
INSERT INTO t1 VALUES('03','cc')
;
CREATE TABLE t2(id VARCHAR(10),d VARCHAR(100))
;
INSERT INTO t2 VALUES('01','01,02,03')
;
INSERT INTO t2 VALUES('02','02,03')
;
INSERT INTO t2 VALUES('03','03')
;SELECT a.id,a.d,wm_concat(b.name) x
FROM t2 a
INNER JOIN t1 b
ON INSTR(','||a.d||',',','||b.id||',')>0
GROUP BY a.id,a.d
; /*
id d x
01 01,02,03 aa,bb,cc
02 02,03 bb,cc
03 03 cc
*/
select '01' zb_id,'aa' zb_name from dual
union all
select '02' zb_id,'bb' zb_name from dual
union all
select '03' zb_id,'cc' zb_name from dual
),
t2 as(
select '01' data_id,'01,02,03' data_name from dual
union all
select '02' data_id,'02,03' data_name from dual
union all
select '03' data_id,'01,03' data_name from dual
)
select data_name,wm_concat(zb_name) wm from
(
select t1.zb_id,t2.data_name,t1.zb_name from t1,t2 where INSTR(','||data_name||',',','||zb_id||',')>0
group by t1.zb_id,data_name,zb_name order by t1.zb_id
)
group by data_name