Подведение итогов с подгруппами - PullRequest
2 голосов
/ 18 марта 2020

Я пытаюсь получить промежуточный итог, запрашивая существующее представление, но сначала мне нужны точные группы. Я знаю, что могу сделать промежуточный итог, используя Sum (xx) over (Partition by xx Order by xx), но я знаю, как использовать это в простых случаях.

Данные при запуске представления выглядят так (с несколькими лишними столбцами, которые бесполезны), за исключением столбца Running_Stock, который я пытаюсь получить:

+---------+----------+---------+------------+-------+---------+---------------+
| Product | Version  | Country |    Week    | sales | returns | Running_stock |
+---------+----------+---------+------------+-------+---------+---------------+
| Pdt1    | pdt1ver1 | Aus     | 2020M01W01 |    10 |       3 |             7 |
| pdt1    | pdt1ver1 | Fra     | 2020M01W01 |     8 |       2 |             6 |
| pdt1    | pdt1ver1 | Fra     | 2020M01W02 |    15 |       5 |            16 |
| pdt1    | pdt1ver2 | UK      | 2020M01W01 |    20 |       5 |            15 |
| pdt1    | pdt1ver2 | UK      | 2020M01W02 |    15 |       1 |            29 |
| pdt1    | pdt1ver2 | UK      | 2020M01w03 |     9 |       0 |            38 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W01 |     5 |       1 |             4 |
| pdt2    | pdt2ver1 | Fra     | 2020M01W02 |     3 |       0 |             7 |
+---------+----------+---------+------------+-------+---------+---------------+

Для каждой версии продукта в данной стране я должен иметь возможность получить running_stock в любой момент времени. Запас рассчитывается по принципу «продажи - возврат».

Я наивно полагал, что могу сделать простое:

Select Product, Version, Country, Week, Sales, Returns,
Sum(sales-returns) over(partition by Version, Country Order by Week) Running_stock
from MyView

Но все, что я получаю, это для каждой «группы», то же самое запас в каждой строке, и это даже не правильная сумма (на самом деле это сумма * 2).

1 Ответ

2 голосов
/ 18 марта 2020

Вы близки, но ваш текущий запрос выполняет SUM по всем строкам в каждой группе. Вам просто нужно добавить спецификацию строки для вашей совокупной суммы:

Sum(sales-returns) over(
  partition by Version, Country 
  Order by Week 
  ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW -- all rows including current row
) Running_stock

TD Manual

...