我需要一列,每当id与之前的行不同时,它就会增加。
id desc
---------------
152 abcdedasd
152 dasdawidh
152 das ads a
194 dasdas da
168 aopwejapw
168 dasidjasd
收件人:
num id desc
---------------------
1 152 abcdedasd
1 152 dasdawidh
1 152 das ads a
2 194 dasdas da
3 168 aopwejapw
3 168 dasidjasd
我有一个Oracle 11g。通常,我需要使用CASE或DECODE来选择依赖于其他列的列。但是我需要参考上一条。而且rownum在没有条件的每一行上都会增加。
答案 0 :(得分:4)
使用DENSE_RANK
分析函数:
Oracle设置:
CREATE TABLE test_data ( id, "desc" ) AS
SELECT 152, 'abcdedasd' FROM DUAL UNION ALL
SELECT 152, 'dasdawidh' FROM DUAL UNION ALL
SELECT 152, 'das ads a' FROM DUAL UNION ALL
SELECT 194, 'dasdas da' FROM DUAL UNION ALL
SELECT 168, 'aopwejapw' FROM DUAL UNION ALL
SELECT 168, 'dasidjasd' FROM DUAL;
查询:
SELECT DENSE_RANK() OVER ( ORDER BY id ) AS num,
t.*
FROM test_data t
输出:
NUM | ID | desc --: | --: | :-------- 1 | 152 | abcdedasd 1 | 152 | dasdawidh 1 | 152 | das ads a 2 | 168 | aopwejapw 2 | 168 | dasidjasd 3 | 194 | dasdas da
db <>提琴here