SQL> select ename, rn,count(*) over(partition by ename) cnt from (select ename ,rownum rn from emp connect by rownum<5) order by rn;
ENAME RN CNT
---------- ---------- ----------
SMITH 1 4
SMITH 2 4
SMITH 3 4
SMITH 4 4
ALLEN 5 1
WARD 6 1
JONES 7 1
MARTIN 8 1
BLAKE 9 1
CLARK 10 1
KING 11 1
TURNER 12 1
JAMES 13 1
FORD 14 1
MILLER 15 1
SCOTT 16 1
ADAMS 17 1
结果很明显。connect by rownum< =n,先根据第一条记录产生 n个记录,此时rownum=n,如果再生成一条记录则rownum>n。由于该查询没有start with子句,所以每条记录都会作用根结点来生产数据,故以后的第条记录都输出一次,在根第一次输出时不会检查rownum。
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/24478467/viewspace-710935/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/24478467/viewspace-710935/