Добавьте предыдущее значение строки коммутативным способом - PullRequest
0 голосов
/ 28 февраля 2020

Я застрял в этом запросе. Таблица T1 выглядит так:

Name ID
A    1 
A   -1
B    2
C    3
C    4
E   -1

Мне нужен вывод:

Name ID   Output
A    1      1
A   -1      0
B    2      2 
C    3      5
C    4      9
E   -1      8

Что я пробовал:

SELECT t.NAME,
        cs.[Count(ID)]

FROM   T1 t
        CROSS apply (SELECT Sum([ID]) [Count(ID)]

                    FROM   T1  t1
                    WHERE  t1.ID <= t.ID ) cs 

Я не получаю правильный вывод, потому что это заказ по Id, а не по имени или может быть любая другая проблема.

1 Ответ

1 голос
/ 28 февраля 2020

Вы можете использовать Окно Функция:

sum(id) over (order by name, case when id < 0 then 1 else 0 end, id)

Вы также можете использовать apply:

select t1.*, t11.Output
from t1 t1 cross apply
     (select sum(t11.id) as Output
      from t1 t11
      where t11.? <= t.? -- Use ordering column instead.
     ) t11;
...