|
上面这个思路,很适合用model语句来做。
正好拿来练练手。
with t as (select rownum n from dual connect by rownum<=21)
,t1 as ( SELECT r,c,s
FROM t t1,t t2
MODEL
DIMENSION BY (t1.n r, t2.n c)
MEASURES (0 s)
RULES update
(
s[any,1]=1, s[1,any]=1,s[1,1] = 0
,s[any, any] = case when cv(r)>1 and cv(c)>1 then s[cv(r)-1,cv(c)] + s[cv(r), cv(c)-1] else s[cv(r),cv(c)] end
) )
select r-1, c-1, s from t1 where r=c and r>1
R-1 C-1 S
---------- ---------- ----------
1 1 2
2 2 6
3 3 20
4 4 70
5 5 252
6 6 924
7 7 3432
8 8 12870
9 9 48620
10 10 184756
11 11 705432
12 12 2704156
13 13 10400600
14 14 40116600
15 15 155117520
16 16 601080390
17 17 2333606220
18 18 9075135300
19 19 3534526380
20 20 1378465288
20 rows selected
Executed in 0.172 seconds
OK! 至此,这个问题算是完满了。 |
|