我需要编写一个oracle select查询,其中我需要一个从1开始递增2的附加列。
示例:
column1 column2
amit 1
siva 3
pyll 5
从oracle表这里我只能得到column1。但在查询中我必须生成column2。所以我的问题是动态获取像rownum()这样的列并将其递增2.是否有任何方法可以得到这样的结果。在mysql中我们可以在查询中使用会话变量。我希望在oracle中有类似的解决方案。但我无法找到一个简单的查询来生成这样的数字。
答案 0 :(得分:4)
你知道你有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
);
或其他一些变体,取决于您希望最终得到的结果。