Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 необычное ранжирование  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
Есть примерно вот такая таблица
DECLARE @Table table (id int , val char(1))  
INSERT INTO  @Table SELECT 1, 'a'
INSERT INTO  @Table SELECT 2, 'b'
INSERT INTO  @Table SELECT 3, 'x'
INSERT INTO  @Table SELECT 4, 'a'
INSERT INTO  @Table SELECT 5, 'b'
INSERT INTO  @Table SELECT 6, 'x'
INSERT INTO  @Table SELECT 7, 'a'
INSERT INTO  @Table SELECT 8, 'b'
INSERT INTO  @Table SELECT 9, 'x'
SELECT * FROM  @Table ORDER BY  id 
 


Что нужно на выходе

1 a 0
2 b 0
3 x 1
4 a 1
5 b 1
6 x 2
7 a 2
8 b 2
9 x 3

То есть мне нужно увеличивать на 1 некий счетчик, каждый раз, когда значение поля Val = 'x'

По-возможности без рекурсии
29 июн 17, 13:17    [20599429]     Ответить | Цитировать Сообщить модератору
 Re: необычное ранжирование  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36989
select 
    a.*
    , x = ( select count(*) from @table x where x.id <= a.id and x.val = 'x' )
from    @table  a


Сообщение было отредактировано: 29 июн 17, 13:24
29 июн 17, 13:23    [20599451]     Ответить | Цитировать Сообщить модератору
 Re: необычное ранжирование  [new]
invm
Member

Откуда: Москва
Сообщений: 9351
SELECT *, sum(case when val = 'x' then 1 else 0 end) over (order by id) FROM  @Table ORDER BY  id 
29 июн 17, 13:24    [20599456]     Ответить | Цитировать Сообщить модератору
 Re: необычное ранжирование  [new]
Cammomile
Member

Откуда:
Сообщений: 1214
invm, так отлично, благодарю
29 июн 17, 13:28    [20599472]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить