Я пытаюсь найти эффективный способ получить столбец Expected
ниже только из Id
и State
.Я хочу, чтобы число Expected
увеличивалось каждый раз, когда State
равно 0
(заказано Id
).
+----+-------+----------+
| Id | State | Expected |
+----+-------+----------+
| 1 | 0 | 1 |
| 2 | 1 | 1 |
| 3 | 0 | 2 |
| 4 | 1 | 2 |
| 5 | 4 | 2 |
| 6 | 2 | 2 |
| 7 | 3 | 2 |
| 8 | 0 | 3 |
| 9 | 5 | 3 |
| 10 | 3 | 3 |
| 11 | 1 | 3 |
+----+-------+----------+
Мне удалось сделать это с помощью следующего SQL, новремя выполнения очень мало при большом наборе данных:
WITH Groups AS
(
SELECT Id, ROW_NUMBER() OVER (ORDER BY Id) AS GroupId FROM tblState WHERE State=0
)
SELECT S.Id, S.[State], S.Expected, G.GroupId FROM tblState S
OUTER APPLY (SELECT TOP 1 GroupId FROM Groups WHERE Groups.Id <= S.Id ORDER BY Id DESC) G
Существует ли более простой и эффективный способ получения этого результата?(В SQL Server 2012 или более поздней версии)