2017-01-03 38 views
0

i开始需要编写一个预言选择查询,其中i需要一个附加列,其通过2递增从1在Oracle选择查询如何通过2增加号码列增量从1

实施例开始:

column1 column2 
amit  1 
siva  3 
pyll  5 

这里从oracle表中我只能得到column1。但在查询中我必须生成column2。所以我的问题是动态获取像rownum()这样的列并将其增加2。有什么方法可以获得这样的结果。在mysql中,我们可以在查询中使用会话变量。我期望在oracle中有类似的解决方案。但我找不到一个简单的查询来生成这样的数字。

+2

命令是否重要?考虑一下rownum会为每行提供的数字,然后考虑如何将该数字转换为您所展示的数字 - 您将如何手动执行以开始,然后考虑如何将其转换为SQL。你没有增加任何确切的东西;你正在操纵rownum值... –

回答

3

你知道你有rownum可用,但退后一步。你从连续序列1,2,3,4,5,6,...开始,并且你想产生一个奇数1,3,5,7,9,11,...序列你需要找出一个将一个转换为另一个的算法。

如果你说你的起始号码是n那么你想生成m其中m=(2*n)-1

可以使用rownum(或row_number()等)来生成n值:

select column1, rownum as n 
from your_table; 

然后你可以应用算法:

select column1, (2*rownum)-1 as column2 
from your_table; 

COLUMN1 COLUMN2 
------- ---------- 
amit    1 
siva    3 
pyll    5 
jane    7 
john    9 
anna   11 
... 

有了这个简单的方法的column2值与column1的值不同。您可以使用row_number()rank()代替,并使用合适的order by子句;或者使用子查询其是否排序并应用之外的ROWNUM(该算法):

select column1, (2*rownum)-1 as column2 
from (
    select column1 
    from your_name 
    order by column1 
); 

或其他一些变化,这取决于你想落得结果。