簡體   English   中英

計算滿足條件時列中position前面有多少行

[英]Calculate how many rows are ahead of position in column when condition is met

如何計算 2 樓的 Jane 前面有多少人(不包括 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 樓 Jane 前面有 2 個人(Wally 和 Tommy)。

我嘗試使用 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

我認為一個簡單的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'

你可以這樣做:

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()快。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM