甲骨文 ROW_NUMBER()
oracle ROW_NUMBER()
我想写一个查询来显示这种结果
column0
column1
column2
column3
a
x
1
1
a
y
1
2
a
z
1
3
b
x
2
1
b
y
2
2
c
x
3
1
c
y
3
2
c
z
3
3
column2 -> column0 的行号
column3 -> 分区column0 & column1的行号
我已经试过了,但没有用
SELECT ROW_NUMBER() OVER (PARTITION BY column0 ORDER BY column0 ) column2,
ROW_NUMBER() OVER (PARTITION BY column0 , column1 ORDER BY column0 , column1) column3
FROM DUAL
你有什么想法吗?
对column2
使用DENSE_RANK
,对column3
使用ROW_NUMBER
:
SELECT
column0,
column1,
DENSE_RANK() OVER (ORDER BY column0) AS column3,
ROW_NUMBER() OVER (PARTITION BY column0 ORDER BY column1) AS column4
FROM yourTable;
与row_number:
SQL> with test (col0, col1) as
2 (select 'a', 'x' from dual union all
3 select 'a', 'y' from dual union all
4 select 'a', 'z' from dual union all
5 select 'b', 'x' from dual union all
6 select 'b', 'y' from dual
7 )
8 select col0, col1,
9 row_number() over (partition by col1 order by col0) col2,
10 row_number() over (partition by col0 order by col1) col3
11 from test
12 order by col0, col1
13 /
COL0 COL1 COL2 COL3
----- ------ ---------- ----------
a x 1 1
a y 1 2
a z 1 3
b x 2 1
b y 2 2
SQL>
我想写一个查询来显示这种结果
column0 | column1 | column2 | column3 |
---|---|---|---|
a | x | 1 | 1 |
a | y | 1 | 2 |
a | z | 1 | 3 |
b | x | 2 | 1 |
b | y | 2 | 2 |
c | x | 3 | 1 |
c | y | 3 | 2 |
c | z | 3 | 3 |
column2 -> column0 的行号
column3 -> 分区column0 & column1的行号
我已经试过了,但没有用
SELECT ROW_NUMBER() OVER (PARTITION BY column0 ORDER BY column0 ) column2,
ROW_NUMBER() OVER (PARTITION BY column0 , column1 ORDER BY column0 , column1) column3
FROM DUAL
你有什么想法吗?
对column2
使用DENSE_RANK
,对column3
使用ROW_NUMBER
:
SELECT
column0,
column1,
DENSE_RANK() OVER (ORDER BY column0) AS column3,
ROW_NUMBER() OVER (PARTITION BY column0 ORDER BY column1) AS column4
FROM yourTable;
与row_number:
SQL> with test (col0, col1) as
2 (select 'a', 'x' from dual union all
3 select 'a', 'y' from dual union all
4 select 'a', 'z' from dual union all
5 select 'b', 'x' from dual union all
6 select 'b', 'y' from dual
7 )
8 select col0, col1,
9 row_number() over (partition by col1 order by col0) col2,
10 row_number() over (partition by col0 order by col1) col3
11 from test
12 order by col0, col1
13 /
COL0 COL1 COL2 COL3
----- ------ ---------- ----------
a x 1 1
a y 1 2
a z 1 3
b x 2 1
b y 2 2
SQL>