2013-08-13 2 views
5

У меня есть некоторые данные и вы хотите иметь возможность последовательно указывать каждую строку, но строки с одним и тем же типом последовательно, номер того же номера, и когда это другой тип продолжает нумерацию. Будут только типы 5 и 6, идентификатор на самом деле более сложный, чем abc123. Я попробовал звание, но мне кажется, чтобы получить два различных число строк - в примере вместо 1 2 2 3 4 было бы 1 1 2 2t-SQL Используйте номер строки, но в повторяющихся строках используйте один и тот же номер

исходное изображение

enter image description here

плотный результат ранг

enter image description here

MS SQL 2008 R2

+0

Какая версия SQL? –

ответ

6

насколько я понимаю, вы хотите, чтобы номер ваши постоянные группы

declare @Temp table (id1 bigint identity(1, 1), ID nvarchar(128), Date date, Type int) 

insert into @Temp 
select 'abc123', '20130101', 5 union all 
select 'abc124', '20130102', 6 union all 
select 'abc125', '20130103', 6 union all 
select 'abc126', '20130104', 5 union all 
select 'abc127', '20130105', 6 union all 
select 'abc128', '20130106', 6 union all 
select 'abc129', '20130107', 6 union all 
select 'abc130', '20130108', 6 union all 
select 'abc131', '20130109', 5 

;with cte1 as (
    select 
     *, 
     row_number() over (order by T.Date) - row_number() over (order by T.Type, T.Date) as grp 
    from @Temp as T 
), cte2 as (
    select *, min(Date) over (partition by grp) as grp2 
    from cte1 
) 
select 
    T.ID, T.Date, T.Type, 
    dense_rank() over (order by grp2) 
from cte2 as T 
order by id1 
+0

Да, я пробовал это и оценил, и это дало мне что-то близкое, но не то, что мне было нужно. Он обозначал 5s в последовательном порядке, а также 6s. Я хочу, чтобы повторение 6s было таким же числом. – user2069895

+0

проверить обновленный ответ –

+0

Это именно то, что я искал благодаря вам так много для вашего понимания и помощи !!!!!! Обновленный ответ был решением. Еще раз спасибо! – user2069895

Смежные вопросы