在oracle中选择查询如何添加一个从1开始以2为增量的数字列

siv*_*iva 2 oracle

我需要编写一个 oracle 选择查询,其中我需要一个从 1 开始增加 2 的附加列。

例子:

column1  column2 
amit      1
siva      3
pyll      5
Run Code Online (Sandbox Code Playgroud)

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

Ale*_*ole 6

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

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

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

select column1, rownum as n
from your_table;
Run Code Online (Sandbox Code Playgroud)

然后您可以应用该算法:

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

COLUMN1    COLUMN2
------- ----------
amit             1
siva             3
pyll             5
jane             7
john             9
anna            11
...
Run Code Online (Sandbox Code Playgroud)

通过这种简单的方法,column2值与值的顺序不同column1。您可以使用row_number()rank()代替,使用合适的order by子句;或者使用一个子查询来进行排序并在它之外应用 rownum(和这个算法):

select column1, (2*rownum)-1 as column2
from (
  select column1
  from your_name
  order by column1
);
Run Code Online (Sandbox Code Playgroud)

或其他一些变化,具体取决于您想要的结果。