ROW_NUMBER (или подобная функция) сбрасывается после подсчета определенного количества строк - PullRequest
0 голосов
/ 25 апреля 2018

Я ищу способ вернуть функции row_number () значение 1 после подсчета количества строк в X.

Я бы хотел, чтобы мои данные выглядели так.

Например, я бы хотел сбросить после 3 строк

YEAR    RowNumber
-----------------
2000    1
2001    2
2002    3
2003    1
2004    2
2005    3
2006    1
2007    2
2008    3
2009    1

Возможно ли это?

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018

Другой ответ близок, но ему нужно CASE для учета Rownumber 3

select 
    RowNumber = case when row_number() over (order by a) % 3 = 0 then 3 else row_number() over (order by a) % 3 end
    ,a
from (values(1),(2),(3),(4),(5),(6),(7),(8)) as V(a)

Так что в вашем случае

RowNumber = case when row_number() over (order by Year) % 3 = 0 then 3 else row_number() over (order by Year) % 3 end

Или, используя REPLACE

RowNumber = replace(row_number() over (order by Year) % 3,0,3) 
0 голосов
/ 25 апреля 2018

Используйте выражение, подобное этому:

(ROWNUMBER() OVER(ORDER BY YEAR)) % 3 

В основном взятие остатка после деления на 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...