oracle 查询数据 排序编号问题....

表中有一列(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;