【问题标题】:enumerating rows in sql with multiple same values在sql中枚举具有多个相同值的行
【发布时间】:2019-01-16 10:56:39
【问题描述】:

我想枚举行,以使非唯一值获得相同的数字并且不增加。所以我的数据应该是这样的:

id - term_seq_id - rn
---------------------
1    0944          1
1    0944          1
1    0962          2
2    1024          1
2    1054          2

我正在研究这个解决方案:

SQL: enumerate returned rows within each group

如果值在窗口函数的ORDER BY 语句中都是唯一的,则此方法有效。所以我从这个解决方案中有以下查询,但它不起作用:

SELECT  student_id_fk
, Term_Seq_Id
, ROW_NUMBER() OVER (PARTITION BY student_id_fk ORDER BY Term_Seq_Id ) AS rn
FROM Courses AS c

ORDER BY student_id_fk, Term_Seq_Id

但是,这无法提供正确的输出。相反,它确实:

id - term_seq_id - rn
---------------------
1    0944          1
1    0944          2
1    0962          3
2    1024          1
2    1054          2

我很茫然,似乎没有办法说“只有在term_seq_id 增加时才增加”。我尝试按多行进行分区,但没有做任何事情。

【问题讨论】:

    标签: sql sql-server tsql sql-server-2017


    【解决方案1】:

    使用dense_rank()

    SELECT  student_id_fk
    , Term_Seq_Id
    , dense_rank() OVER (PARTITION BY student_id_fk ORDER BY Term_Seq_Id ) AS rn
    FROM Courses AS c
    
    ORDER BY student_id_fk, Term_Seq_Id
    

    【讨论】:

      【解决方案2】:

      你在找这个吗:

      SELECT  student_id_fk
      , Term_Seq_Id
      , DENSE_RANK() OVER (PARTITION BY student_id_fk ORDER BY Term_Seq_Id ) AS rn
      FROM Courses AS c
      
      ORDER BY student_id_fk, Term_Seq_Id
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-16
        • 2015-09-07
        • 2023-01-02
        • 2014-09-19
        • 1970-01-01
        相关资源
        最近更新 更多