根据列更改对 select SQL 中的行自动编号

Autonumber rows in select SQL based on column changes

我使用 select all 语句从 table A 中检索所有值。Table 示例如下:

+---+----+---+
| 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 相关吗?如何做?

我相信你需要的只是

SELECT Distinct  
  ROW_NUMBER() OVER(ORDER BY Col1 ASC,Col2 ASC) AS Row_num,
  Col1, Col2
FROM Table1 

您的问题描述将使用 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;