У меня есть этот образец таблицы:

Product    |   Category    |    QTY      |   Load Date
-----------+---------------+-------------+--------------
   1            Alpha           10         Jan. 1, 2021
   2            Beta            20         Jan. 1, 2021
   3           Charlie          20         Jan. 1, 2021
   1            Alpha           30         Jan. 2, 2021
   3           Charlie          30         Jan. 3, 2021
   1            Alpha          -50         Jan. 4, 2021
   2            Beta           -20         Jan. 4, 2021
   4            Delta           40         Jan. 4, 2021

Я хочу добавить столбец, который будет суммировать количество на основе предыдущей даты загрузки и группировать по продукту и категории.

Как я могу получить вывод, как показано ниже?

Product    |   Category    |    QTY      |   Load Date   |  Sum_QTY
-----------+---------------+-------------+---------------+----------
   1            Alpha           10         Jan. 1, 2021       10
   2            Beta            20         Jan. 1, 2021       20
   3           Charlie          20         Jan. 1, 2021       20
   1            Alpha           30         Jan. 2, 2021       40
   3           Charlie          30         Jan. 3, 2021       50
   1            Alpha          -50         Jan. 4, 2021      -10
   2            Beta           -20         Jan. 4, 2021        0
   4            Delta           40         Jan. 4, 2021       40

Ваша помощь много значит.

Спасибо

0
user17745296 23 Дек 2021 в 08:39
2
Покажите нам свою попытку и объясните, где застряли.
 – 
Dale K
23 Дек 2021 в 09:12

2 ответа

Если я правильно понимаю вопрос, используя СУММ в качестве аналитической функции сделает запрос достаточно прямым;

SELECT *,
 SUM("QTY") OVER (PARTITION BY "Product", "Category" ORDER BY "Load Date") Sum_QTY
FROM Table1
ORDER BY "Load Date", "Product", "Category"

SQLfiddle для тестирования

3
Joachim Isaksson 23 Дек 2021 в 09:09
3
Я думаю, что лучше использовать [Дата загрузки] вместо «Дата загрузки». . .
 – 
Gezgalee
23 Дек 2021 в 09:28
Есть ли разница, кроме использования " " в качестве переносимого (выходного) между СУБД и [ ] в зависимости от SQL Server? (честный вопрос, если и есть разница, то я о ней не знаю)
 – 
Joachim Isaksson
23 Дек 2021 в 10:47
Привет, мистер @Joachim Isaksson, я думаю, [] лучше. потому что в Dynamic SQL "" это может создать большие проблемы для разработки и отладки.
 – 
Gezgalee
25 Дек 2021 в 08:55

Другой вариант - использовать внешнее приложение

select t.*, 
       s.sum_QTY
from   Table1 t
  outer apply ( select sum(t2.QTY) sum_QTY from Table1 t2 where t2.Category = t.Category and t2.[Load Date] <= t.[Load Date] ) s
ORDER BY [Load Date], Product, Category

SQL Fiddle

0
GuidoG 23 Дек 2021 в 09:47