我是Oracle的新手,我正在尝试做一些不寻常的事情。给定此表和数据,我需要选择每一行,并复制DupCount大于1的行。
create table TestTable ( Name VARCHAR(10), DupCount NUMBER ) INSERT INTO TestTable VALUES ('Jane', 1); INSERT INTO TestTable VALUES ('Mark', 2); INSERT INTO TestTable VALUES ('Steve', 1); INSERT INTO TestTable VALUES ('Jeff', 3);
所需结果:
Name DupCount --------- ----------- Jane 1 Mark 2 Mark 2 Steve 1 Jeff 3 Jeff 3 Jeff 3
如果通过单个select语句无法做到这一点,那么对存储过程的任何帮助将不胜感激。
您可以使用分层查询来做到这一点:
SQL小提琴
查询1 :
WITH levels AS ( SELECT LEVEL AS lvl FROM DUAL CONNECT BY LEVEL <= ( SELECT MAX( DupCount ) FROM TestTable ) ) SELECT Name, DupCount FROM TestTable INNER JOIN levels ON ( lvl <= DupCount ) ORDER BY Name
结果 :
| NAME | DUPCOUNT | |-------|----------| | Jane | 1 | | Jeff | 3 | | Jeff | 3 | | Jeff | 3 | | Mark | 2 | | Mark | 2 | | Steve | 1 |