我使用全选语句从表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有关,怎么做?
我相信您所需要的只是
选择不同ROW_NUMBER()OVER(ORDER BY Col1 ASC,Col2 ASC)AS Row#,Col1,Col2从表1
对问题的描述将使用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;