ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 如何按照某个列的数据将一行展开成多行

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

原创 Linux操作系统 作者:NinGoo 时间:2019-07-16 07:03:01 0 删除 编辑

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原表得到最终结果。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/193161/viewspace-50309/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2004-12-07

  • 博文量
    200
  • 访问量
    132008