如何按照某个列的数据将一行展开成多行

Itpub上有人提出如下问题

表t1中列(number类型)中有数据
3,
5,
2。。。还有更多数据
要通过一个sql语句实现如下结果:
a rownum
--- ------------
3 1
3 2
3 3
5 1
5 2
5 3
5 4
5 5
2 1
2 2

也就是说,要按照列a的值n将该行数据展开成n行。实际上,这个问题和http://ningoo.itpub.net/post/2149/260758中的问题有相似之处,所以也可以用同样的思路来处理。


select">SYS@ning>select * from test;

ID
----------
3
2
5

SYS@ning>select a.id,b.l
2 from test a,
3 (select level l from dual connect by level<=(select max(id) from test)) b
4 where a.id>=b.l;

ID L
---------- ----------
3 1
3 2
3 3
2 1
2 2
5 1
5 2
5 3
5 4
5 5

10 rows selected.

利用connect by先构造出最大a值的一个连续序列,然后join原表得到最终结果。

请使用浏览器的分享功能分享到微信等