|
lugionline 发表于 2012-5-13 20:37 ![]()
我知道能用啊,但是貌似很复杂吧,呵呵
ORACLE版本来了。你还有什么东西是认为ORACLE做不到的?尽管往我身上招呼。
With
E1(n, c) As
(
Select 0, 0 FROM DUAL
Union All
Select n+1, c+1 From E1 Where n < 36
),
E2(n, c) As
(
Select 1, Cast(LPAD(1,10) As Varchar2(2000)) FROM DUAL
Union All
Select E2.n + 1, E2.c || LPAD((SELECT MIN(GREATEST(1 + E1.c,1 + TO_NUMBER(SUBSTR(E2.c, (E2.n - E1.n - 1) * 10 + 1, 10))))
From E1 Where E1.n > 0 And (E1.n + 1) <= (E2.n + 1)
) ,10)
From E2
Where E2.n < 36
)
Select E1.n, SUBSTR(E2.c, (E1.n - 1) * 10 + 1, 10) c
From E1, E2 Where E2.n = 36 And E1.n > 0
/
N C
---------- ----------
1 1
2 2
3 2
4 3
5 3
6 3
7 4
8 4
9 4
10 4
11 5
12 5
13 5
14 5
15 5
16 6
17 6
18 6
19 6
20 6
21 6
22 7
23 7
24 7
25 7
26 7
27 7
28 7
29 8
30 8
31 8
32 8
33 8
34 8
35 8
36 8
36 rows selected.
|
|