2013-02-19 39 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