2013-02-19 38 views
1

我在oracle中有下表。版本9i循环和联合所有在oracle select语句中

Num   count 

123    1 
345    4 
455    3 
234    2 
542    1 

我想写一个选择查询,它给了我下面的输出。

123 
345 
345 
345 
345 
455 
455 
455 
234 
234 
542 

每个数字应显示其计数次数。如果我使用功能,这可以实现吗?我不允许创建任何临时表。

我知道我必须使用循环序列,然后使用UNION ALL,但不知道如何实现它。我想这

select Num from <table> where count=1 
union all 
// what fits here? 

回答

3

这可以通过使用伪列LEVELCorrelated Query为重复的次数NUM计数来完成...

尝试下面的查询

select num from (select distinct num,level,ROWID as RD 
from table a 
connect by level<= (select count from table b where a.num=b.num)) 
order by rd; 
+1

您可以通过级别<=(从表b中选择计数,其中a.num = b.num))通过级别<= num)连接) – 2013-02-20 06:22:36

+0

@ M.Heydari Thanks!这很简单.... – Aspirant 2013-02-20 13:06:16

1

试试这个

SELECT A.NUM 
FROM Test A 
INNER JOIN (SELECT ROWNUM RN FROM dual connect by level < 100) B 
ON B.rn <= A.count 
order by A.NUM; 

SQL DEMO

0
WITH cte ("Num", "count") 
AS 
(
    SELECT "Num", "count" FROM TableName 
    UNION ALL 
    SELECT "Num", "count" - 1 FROM cte WHERE "count" > 1 
) 
SELECT "Num" 
FROM cte 
ORDER BY "Num" 
+0

TY.I正在使用oracle 9i。所以我得到不支持的列别名。 – 2013-02-19 06:05:08

+0

如果是这种情况,请参阅@rs。的答案。 – 2013-02-19 06:05:51

0

如果您使用11gR2中,你可以做它是这样的:

with t(num, i) as 
(
    select num, count from tab1 union all 
    select num, i-1 
    from t 
    where i >1 
)  
select num from t 
order by num; 

Here is a sqlfiddle demo

+0

TY.I使用oracle 9i。所以我得到不支持的列别名。 – 2013-02-19 06:06:17