перечисление строк в SQL с несколькими одинаковыми значениями - PullRequest
0 голосов
/ 16 января 2019

Я хочу перечислить строки так, чтобы неуникальные значения получали одинаковое число и не увеличивались. Поэтому мои данные должны выглядеть так:

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

Я искал это решение:

SQL: перечислить возвращенные строки в каждой группе

Что работает, если все значения уникальны в операторе 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 увеличивается". Я пробовал разбивать на несколько строк, но ничего не получалось.

Ответы [ 2 ]

0 голосов
/ 16 января 2019

Вы ищете это:

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
0 голосов
/ 16 января 2019

использование 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
...