Вычислить, сколько строк опережает позицию в столбце при выполнении условия - PullRequest
0 голосов
/ 08 октября 2019

Как подсчитать, сколько людей опережает Джейн на 2 этаже (не считая тех, кто на 1 этаже)?

+------+---------+----------+
|Index |  Name   |   Floor  |
+------+---------+----------+
|   1  | Sally   |     1    |
|   2  | Sue     |     1    |
|   3  | Fred    |     1    |
|   4  | Wally   |     2    |
|   5  | Tommy   |     2    |
|   6  | Jane    |     2    |
|   7  | Bart    |     2    |
|   8  | Sam     |     3    |
+------+---------+----------+

Ожидаемый результат - 2, так как на втором этаже впереди Джейн 2 человека (Уолли и Томми).

Я пытался использовать CHARINDEX, чтобы найти номер строки извременная таблица, которую я сгенерировал, но которая не работает:

SELECT CHARINDEX('Jane', Name) as position
INTO #test
FROM tblExample
WHERE Floor = 2
select ROW_NUMBER() over (order by position) from #test
WHERE position = 1

Ответы [ 2 ]

2 голосов
/ 08 октября 2019

Я думаю, что простой row_number() справится с задачей

Select Value = RN-1
 From  (
         Select *
               ,RN = row_number() over (partition by [floor] order by [index])
         From  YourTable
         Where [Floor]=2
       ) A
 Where [Name]='Jane'
0 голосов
/ 08 октября 2019

Вы можете сделать:

select count(*)
from t
where t.floor = 2 and
      t.id < (select t2.id from t t2 where t2.name = 'Jane' and t2.floor = 2);

С индексом на (floor, name, id) я бы ожидал, что это будет быстрее, чем row_number().

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