我想获取两列之间的数字列表。一个表值将被用来产生更多的行。使用密钥获取两列之间的数字列表
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主题完全解决您的问题。 –
在链接主题中,结果是所有范围的并集。在我的情况下,我想与源表加入。这就是为什么我改变了标题并包含了“关键”部分。 –