前一段用SQL实现了一个复杂的功能,但是留下了一个问题一直没有真正的解决,那就是如何同时为表中的多条记录分别实现构造结果集。
利用Oracle的TYPE实现结果集构造。
问题源自:一个复杂问题的求解过程(一):http://yangtingkun.itpub.net/post/468/456641
如何为表中多条记录分别实现构造结果集(一):http://yangtingkun.itpub.net/post/468/459848
上一篇已经提到通过DISTINCT的方式对于数据量大的情况是不可取的,而且从本质上讲,这个SQL的逻辑是有问题的。
当然这里可以通过对表中的配置记录依次生成结果集:
SQL> SELECT T.ID, T.VALUE, POWER, T.VALUE * (LEVEL - 1) RESULTITPUB个人空间+B)@;mm5N$U@)n
2 FROM (SELECT ROWNUM, T.* FROM T WHERE ID = 1) TITPUB个人空间:mRh$QWZ
3 CONNECT BY LEVEL <= T.POWER
lNU*j$zG_.~L|0 4 UNION ALL
QWG%@ |1k5Z
B/W7R0 5 SELECT T.ID, T.VALUE, POWER, T.VALUE * (LEVEL - 1) RESULT
"v.wLuq\;H8Pg0 6 FROM (SELECT ROWNUM, T.* FROM T WHERE ID = 2) TITPUB个人空间a4tn z$W1Cz'Y Q
7 CONNECT BY LEVEL <= T.POWERITPUB个人空间 PC1^'Bh n6B7A
8 UNION ALL
X^~yP0 9 SELECT T.ID, T.VALUE, POWER, T.VALUE * (LEVEL - 1) RESULT
)D/r#D4B sxSTW0 10 FROM (SELECT ROWNUM, T.* FROM T WHERE ID = 3) TITPUB个人空间 _N6k(aI^L
11 CONNECT BY LEVEL <= T.POWERITPUB个人空间 I,WN*^i7|2TS#} {p m
12 UNION ALL
cOm!m
d3|0 13 SELECT T.ID, T.VALUE, POWER, T.VALUE * (LEVEL - 1) RESULT
'V)i#S]Cb0 14 FROM (SELECT ROWNUM, T.* FROM T WHERE ID = 4) TITPUB个人空间}\7] FjyOz
15 CONNECT BY LEVEL <= T.POWERITPUB个人空间 N3yAc2Z
16 UNION ALLITPUB个人空间4DV;iS~Z"|
17 SELECT T.ID, T.VALUE, POWER, T.VALUE * (LEVEL - 1) RESULT
oV5H.?4L$BG[g0 18 FROM (SELECT ROWNUM, T.* FROM T WHERE ID = 5) TITPUB个人空间"z,i.W/b,D`
19 CONNECT BY LEVEL <= T.POWERITPUB个人空间HRPnqr
js
20 ;
ID VALUE POWER RESULT