Sql Oracle复制行N次,其中N为列

Sql Oracle复制行N次,其中N为列,sql,oracle,oracle10g,Sql,Oracle,Oracle10g,我是甲骨文的新手,我正在尝试做一些不寻常的事情。给定此表和数据,我需要选择每一行,并在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 ('S

我是甲骨文的新手,我正在尝试做一些不寻常的事情。给定此表和数据,我需要选择每一行,并在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语句实现这一点,则非常感谢对存储过程的任何帮助。

您可以使用递归cte实现这一点。看起来是这样的

with cte as (name, dupcount, temp)
(
   select name,
          dupcount,
          dupcount as temp
   from testtable
     union all
   select name, 
          dupcount,
          temp-1 as temp
   from cte 
   where temp > 1
)
select name, 
       dupcount
from cte
order by name

您可以使用分层查询来执行此操作:

查询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 |

什么版本的Oracle?例如,递归CTE示例@Hogan posted非常好,但我相信它至少需要11.2I,我应该提到它是Oracle 10g。你需要命名CTE列,否则你会得到一个错误-
,CTE(name,dupcount,temp)为
,这看起来很好,可能工作得很好,但我忘了提到我们使用的是10g。谢谢。@MT0-谢谢你的指针,名称是在SQL Server中推断出来的。非常好用!谢谢