【问题标题】:Autonumber rows in select SQL based on column changes根据列更改自动编号选择 SQL 中的行
【发布时间】:2020-04-01 09:47:09
【问题描述】:

我使用全选语句从表 A 中检索所有值。表 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


    【解决方案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;
    

    【讨论】:

    • 我想你只是在我测试它的时候编辑了你的答案。原来 select t.*, row_number() over (partition by col1, col2 order by col3) as seqnum from t 是我正在寻找的答案!
    【解决方案2】:

    我相信你所需要的只是

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

    【讨论】:

    • 对不起,我提供了错误的样本表。现在还适用吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 1970-01-01
    相关资源
    最近更新 更多