Sql 使用键获取两列之间的数字列表
我想得到两列之间的数字列表。表值将用于生成更多行 e、 g 表1: 我的输出应该是:Sql 使用键获取两列之间的数字列表,sql,oracle,numbers,between,Sql,Oracle,Numbers,Between,我想得到两列之间的数字列表。表值将用于生成更多行 e、 g 表1: 我的输出应该是: Key Num --- --- A 1 A 2 A 3 B 6 B 7 B 8 我试过了,但没用,我需要用钥匙划行 我需要在Oracle 11g中解决这个问题。在transact-SQL中创建存储过程 Create Procedure GetRangeFromTable As Begin create table #Result(
Key Num
--- ---
A 1
A 2
A 3
B 6
B 7
B 8
我试过了,但没用,我需要用钥匙划行
我需要在Oracle 11g中解决这个问题。在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
在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
这是贾斯汀解决方案的一个稍加修改的版本,发布在:
我不喜欢在内部查询中使用distinct,但我目前没有时间对此进行更深入的研究。这是Justin的解决方案的一个稍加修改的版本,发布在: 我不喜欢在内部查询中使用distinct,但我目前没有时间深入研究这个问题。试试这个
SELECT t.StartNum , t.StartNum , ROWNUM
FROM Table1 t , ALL_OBJECTS
WHERE ROWNUM between t.StartNum and t.StartNum
试试这个
SELECT t.StartNum , t.StartNum , ROWNUM
FROM Table1 t , ALL_OBJECTS
WHERE ROWNUM between t.StartNum and t.StartNum
一匹没有名字的马将是
SELECT distinct Key,(level + StartNum)-1 Num
FROM Table1
CONNECT BY (LEVEL +StartNum ) <= EndNum+1
order by Key, Num
但是我更喜欢创建一个全局临时表并从plsql中填充它,因为上面的方法包含表上的后续decart,因此需要不同的数据。
一匹没有名字的马将是
SELECT distinct Key,(level + StartNum)-1 Num
FROM Table1
CONNECT BY (LEVEL +StartNum ) <= EndNum+1
order by Key, Num
但是我更喜欢创建一个全局临时表并从plsql中填充它,因为上面的方法包含表上的后续decart,因此需要不同的数据。
获取数字列表在这个主题上得到了很好的回答,但我的问题是将其与源表连接起来,在源表中,我需要从同一个源表发送参数开始和结束。但由于信息不足,这没有帮助。据我所知,链接主题正好解决了您的问题。在链接主题中,结果是所有范围的并集。在我的例子中,我想要一个与源表的连接。这就是为什么我更改了标题并加入了关键部分。Justin在这个问题上的回答就是我所能找到的:获取数字列表在这个主题上得到了很好的回答,但我的问题是将其与源表连接起来,我需要从同一个源表发送参数开始和结束。但是没有帮助就是没有足够的信息。据我所知,链接主题正好解决了您的问题。在链接主题中,结果是所有范围的并集。在我的例子中,我想要一个与源表的连接。这就是为什么我改变了标题,并加入了关键部分。贾斯汀在这个问题上的回答就是我所能告诉你的:非常感谢。但我们需要在Oracle中解决这个问题。我会把它包括在问题中,是同一个原则。我没有甲骨文安装它很多。但我们需要在Oracle中解决这个问题。我会把它包括在问题中,是同一个原则。我没有安装oracle。只有当数据库中的对象数小于表中的max.endnum时,此解决方案才会工作。只有当数据库中的对象数小于表中的max.endnum时,此解决方案才会工作。但通过一些测试,我们了解到性能随着行数的增加呈指数级下降。因此,正如vmatyi正确提到的那样,最好的解决方案是采用基于表的解决方案。谢谢大家。这个解决方案可以正常工作。但通过一些测试,我们了解到性能随着行数的增加呈指数级下降。因此,正如vmatyi正确提到的那样,最好的解决方案是采用基于表的解决方案。谢谢大家。