根据列更改对 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;
我使用 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;