Я хочу получить количество значений столбца, но с условным значением на основе другого значения столбца.Пример: ниже данных, где первый столбец является идентификатором, второй столбец statusId, третий столбец повторяется custId, четвертый столбец status.
id statusId CustId status
1 1 100 E
2 1 100 E
3 1 100 E
4 2 100 S
5 1 100 E
6 1 100 E
7 2 100 S
8 1 200 E
9 1 200 E
10 2 200 S
11 2 200 S
12 1 200 E
13 2 200 S
У меня есть функция used Row_Number()
, но это не помогло ее достичь.
select case when Status = 'S' then 0
when Status = 'E' then sum(case when Status = 'E' then 1 else 0 end) over (order by Id asc) end as cnt
from cust
Ожидаемый результат: Я хочу получить результат в следующем формате, используя запрос выбора (не любой цикл).
CusId ExpectedCount
100 2 -- there are two rows with status E before last S
200 1 -- There is one row with status E before last S
Чтобы достичь вышеуказанного результата, я считаю строку, имеющую статус E, и сбрасываю ее обратно в 0 для статуса S, а итоговый счет статуса E должен быть возвращен до последнего состояния S.
Фактический результат: я получаю счет значения состояния «E», и счет не сбрасывается, счет продолжает работать.Пример:
custId Id Status ExpectedCount
100 1 E 1
100 2 E 2
100 3 E 3
100 4 S 0
100 5 E 4
100 6 E 5
100 7 E 6