I\'m using Postgresql 9.2 and I need to sum quantitys from buttom up with initial value of 100, however if I encounter a row with name X i need to restart the SUM from the
You need a RECURSIVE query
SQL FIDDLE DEMO
WITH RECURSIVE t("itemorder", "name", "qty", "modifyed_sum", "level") AS (
SELECT "itemorder",
"name",
"qty",
100 + CASE
WHEN "name" = 'A' THEN "qty"
ELSE 0
END as "modifyed_sum",
"itemorder" as "level"
FROM myTable
WHERE "itemorder" = (SELECT max("itemorder") FROM myTable)
UNION ALL
SELECT myTable."itemorder",
myTable."name",
myTable."qty",
CASE
WHEN myTable."name" = 'A' THEN t."modifyed_sum" + myTable."qty"
WHEN myTable."name" = 'X' THEN myTable."qty"
ELSE t."modifyed_sum"
END as "modifyed_sum",
myTable."itemorder" as "level"
FROM myTable
JOIN t
ON myTable."itemorder" + 1 = t."itemorder"
AND myTable."itemorder" = t."level" - 1
WHERE myTable."itemorder" > 0
)
SELECT *
FROM t
ORDER BY "itemorder"
OUTPUT
| itemorder | name | qty | modifyed_sum | level |
|-----------|------|-----|--------------|-------|
| 1 | A | -20 | 20 | 1 |
| 2 | A2 | 350 | 40 | 2 |
| 3 | X | 40 | 40 | 3 |
| 4 | A | 50 | 140 | 4 |
| 5 | A | -10 | 90 | 5 |
| 6 | A2 | 10 | 100 | 6 |