如何为非唯一值选择序列号?

时间:2017-09-04 06:58:06

标签: sql oracle select

我的列中包含非唯一值,如下所示:

ID      COL_A
0       A
1       B
2       B
3       C
4       D
5       D
6       D
7       E

我想在产生以下输出的那两列之外选择一个偏移量:

ID      COL_A     OFFSET
0       A         0
1       B         0
2       B         1
3       C         0
4       D         0
5       D         1
6       D         2
7       E         0

应该应用偏移量,以便使用较低主键的值接收较低的偏移量。

我可能想出一个PL / SQL方法来实现这一点,但这在纯SQL中是否可行?

2 个答案:

答案 0 :(得分:3)

row_number()窗口功能正是医生所规定的:

SELECT id, col_a, ROW_NUMBER() OVER (PARTITION BY col_a ORDER BY id) - 1 AS offset
FROM   mytable

答案 1 :(得分:1)

USE ROW_NUMBER

SELECT COL1,COL2,ROW_NUMBER() OVER (PARTITION BY COL2 ORDER BY Col1) Seq
FROM TableNAme