Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 使用键获取两列之间的数字列表_Sql_Oracle_Numbers_Between - Fatal编程技术网

Sql 使用键获取两列之间的数字列表

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(

我想得到两列之间的数字列表。表值将用于生成更多行

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(           
            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正确提到的那样,最好的解决方案是采用基于表的解决方案。谢谢大家。