基于列更改的选择SQL中的自动编号行

问题描述 投票:0回答:2

我使用全选语句从表A中检索所有值。表示例如下:

+---+----+---+
| a | 23 | X | 
+---+----+---+
| a | 23 | Y |
+---+----+---+
| a | 24 | X |
+---+----+---+
| a | 24 | Y |
+---+----+---+
| b | 24 | X |
+---+----+---+
| b | 24 | Y |
+---+----+---+
| b | 25 | X |
+---+----+---+
| b | 25 | Y |
+---+----+---+
| b | 25 | Z | 
+---+----+---+

出于此查询稍后的目的,我想为第1列和第2列的每个唯一组合都有一个记录号。例如:

+---+----+---+---+
| a | 23 | X | 1 |
+---+----+---+---+
| a | 23 | Y | 2 |
+---+----+---+---+
| a | 24 | X | 1 |
+---+----+---+---+
| a | 24 | Y | 2 |
+---+----+---+---+
| b | 24 | X | 1 |
+---+----+---+---+
| b | 24 | Y | 2 |
+---+----+---+---+
| b | 25 | X | 1 |
+---+----+---+---+
| b | 25 | Y | 2 |
+---+----+---+---+
| b | 25 | Z | 3 |
+---+----+---+---+

这可能与SQL有关,怎么做?

sql oracle row-number
2个回答
0
投票

我相信您所需要的只是

选择不同ROW_NUMBER()OVER(ORDER BY Col1 ASC,Col2 ASC)AS Row#,Col1,Col2从表1


0
投票

对问题的描述将使用dense_rank()

select t.*, dense_rank() over (order by col1, col2)
from t;

您的样本数据显示dense_rank()partitition by

select t.*,
       dense_rank() over (partition by col1, col2 order by col3) as seqnum
from t;
© www.soinside.com 2019 - 2024. All rights reserved.