我想獲取兩列之間的數字列表。一個表值將被用來產生更多的行。使用密鑰獲取兩列之間的數字列表
e.g 表1:
Key StartNum EndNum
--- -------- ------
A 1 3
B 6 8
我的輸出應該是:
Key Num
--- ---
A 1
A 2
A 3
B 6
B 7
B 8
我試過this,但它並沒有幫我(我需要用鑰匙行)。
我需要在Oracle 11g中解決這個問題。
我想獲取兩列之間的數字列表。一個表值將被用來產生更多的行。使用密鑰獲取兩列之間的數字列表
e.g 表1:
Key StartNum EndNum
--- -------- ------
A 1 3
B 6 8
我的輸出應該是:
Key Num
--- ---
A 1
A 2
A 3
B 6
B 7
B 8
我試過this,但它並沒有幫我(我需要用鑰匙行)。
我需要在Oracle 11g中解決這個問題。
a_horse_with_no_name-S解決方案是
SELECT distinct Key,(level + StartNum)-1 Num
FROM Table1
CONNECT BY (LEVEL +StartNum) <= EndNum+1
order by Key, Num
輸出:
A 1
A 2
A 3
B 6
B 7
B 8
但我寧願創建一個全局臨時表和填充它plsql,因爲上面的方法在表中包含後續的decart(因此需要不同的)。 http://www.dba-oracle.com/t_temporary_tables_sql.htm
+1比我的解決方案更加緊湊。 –
該解決方案按其應有的方式工作。但通過一些測試,我們瞭解到性能隨着行數呈指數下降。因此,正如vmatyi正確提到的,最好的解決方案是尋求基於表格的解決方案。謝謝大家。 –
創建在Transact SQL中的存儲過程
Create Procedure GetRangeFromTable
As
Begin
create table #Result(
code varchar(50),
num int
)
Declare
@code varchar(50),
@start int ,
@end int
DECLARE num_cursor CURSOR FOR Select * from Table1
OPEN num_cursor
FETCH NEXT FROM num_cursor
INTO @code, @start, @end
WHILE @@FETCH_STATUS = 0
BEGIN
While @start <= @end
Begin
Insert into #Result(code,num) Values (@code,@start)
Set @start= @start + 1
End
FETCH NEXT FROM num_cursor
INTO @code, @start, @end
END
Select * from #Result
CLOSE num_cursor
DEALLOCATE num_cursor
End
這個問題被標記爲Oracle ... –
非常感謝。但需要在Oracle中解決這個問題。我將在這個問題中加入這一點。 –
這是一樣的原則。我沒有oracle安裝它 –
這就是賈斯汀的解決方案的一個稍微改編版本發表於:get list of numbers in between two columns
select key, num
from (
select distinct t1.key, t1.startnum + level - 1 num, t1.startnum, t1.endnum
from table1 t1
connect by level <= (select t2.endnum from table1 t2 where t1.key = t2.key)
) t
where num between t.startnum and t.endnum
order by key, num
我不開心,在需要對distinct
內部查詢,但我目前沒有時間深入研究。
試試這個,
SELECT t.StartNum , t.StartNum , ROWNUM
FROM Table1 t , ALL_OBJECTS
WHERE ROWNUM between t.StartNum and t.StartNum
這隻有在數據庫中的對象數小於最大值的情況下才有效。 endnum在表 –
葛亭的號碼列表良好回答有關這個主題的http://stackoverflow.com/q/1453747/952018 但我的問題是與源表,我需要發送的參數加入它(啓動和結束)也來自同一個源表。 –
「*但它沒有幫助*」是不夠的信息。據我所知,linke主題完全解決您的問題。 –
在鏈接主題中,結果是所有範圍的並集。在我的情況下,我想與源表加入。這就是爲什麼我改變了標題幷包含了「關鍵」部分。 –