我需要编写一个 oracle 选择查询,其中我需要一个从 1 开始增加 2 的附加列。
例子:
column1 column2
amit 1
siva 3
pyll 5
Run Code Online (Sandbox Code Playgroud)
这里从oracle表我只能得到column1。但在查询中我必须生成 column2。所以我的问题是动态获取像 rownum() 这样的列并将其增加 2. 有没有办法获得这样的结果。在 mysql 中,我们可以在查询中使用会话变量。我希望在 oracle 中有类似的解决方案。但我找不到一个简单的查询来生成这样的数字。
您知道您有可用的 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)
或其他一些变化,具体取决于您想要的结果。