[英]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.