表中有一列(test)数据 比如是如下:
--test----
aaa
bbb
ddd
ccc
aaa
aaa
ddd
我要查出一条伪列 就是编号列 (num ),结果如下:
--test---num--
aaa 1
bbb 2
ddd 3
ccc 4
aaa 1
aaa 1
ddd 3
已经解答,用dense_rank()
select test,rn from(select test,ROW_NUMBER() OVER(test ) as rn)
下面的是可以的,但是略微麻烦
select test, ( select t3.rum from (select rownum as rum,t2.test from Table t2 ) t3 where t3.test = t1.test and rownum = 1 ) num from Table t1
用管道函数也可以实现:
CREATE OR REPLACE PACKAGE refcur_pkg IS
TYPE refcur_t IS REF CURSOR RETURN tj_zj_35%ROWTYPE;
TYPE outrec_typ IS RECORD (
var_num varchar2(5000),
var_char1 VARCHAR2(30),
var_char2 VARCHAR2(30));
TYPE outrecset IS TABLE OF outrec_typ;
FUNCTION f_trans(p refcur_t)
RETURN outrecset PIPELINED;
END refcur_pkg;
CREATE OR REPLACE PACKAGE BODY refcur_pkg IS
FUNCTION f_trans(p refcur_t)
RETURN outrecset PIPELINED IS
out_rec outrec_typ;
in_rec p%ROWTYPE;
rownm number;
tempStr varchar2(5000);
tempcount pls_integer;
BEGIN
rownm := '1';
tempStr:= '';
tempcount:= 0;
LOOP
FETCH p INTO in_rec;
EXIT WHEN p%NOTFOUND;
if instr(tempStr,in_rec.tjzj121)<=0 then
rownm:=rownm+1;
end if;
tempStr:= tempStr||in_rec.tjzj121||','||rownm;
tempcount:= instr(tempStr,in_rec.tjzj121);
out_rec.var_num := SUBSTR(tempStr,tempcount+4,1) ;
out_rec.var_char1 := in_rec.tjzj121;
out_rec.var_char2 := in_rec.tjzj350;
tempcount:=0;
PIPE ROW(out_rec);
END LOOP;
CLOSE p;
RETURN;
END;
END refcur_pkg;