SQL - Как маркировать номер для каждой строки и блока - PullRequest
1 голос
/ 29 марта 2020

У меня есть такой столбец таблицы

A, A, B, C, A, A, B, D, E, E, E

Я хотел бы обозначить номер для каждого ROW и блока как этот

(A, 1), (A, 1), (B, 2), (C, 3), (A, 4), (A, 4), (B, 5), (D, 6), (E, 7), (E, 7), (E, 7)

Как это сделать? Спасибо.

1 Ответ

4 голосов
/ 29 марта 2020

Предположим, у вас есть такая таблица:

SELECT * FROM t ORDER BY ord

let, ord
--------
A, 1
A, 2
B, 3
C, 4
A, 5
A, 6
B, 7
D, 8
E, 9
E, 10
E, 11

Если вы сделаете это:

with cte as(
  select let, ord, case when lag(let) over(order by ord) <> let then 1 else 0 end as letchanged
  from yourtable
)

select let,
  1 + sum(letchanged) over(order by ord rows unbounded preceding) as ctr
from cte

Тогда вы получите:

let, ctr
--------
A, 1
A, 1
B, 2
C, 3
A, 4
A, 4
B, 5
D, 6
E, 7
E, 7
E, 7
...