Итоговая сумма по дате транзакции и идентификатору продукта - PullRequest
0 голосов
/ 01 октября 2018

Используя MSSQL17, я веду исследовательскую работу, изучаю продажи по продуктам и услугам и подвожу итоги за месяц.

Попытка решить, как создать запрос, который суммирует мои продукты из таблицы транзакций в данном случае по дате и идентификатору продукта, чтобы создать что-то вроде:

-------------------
Date            | ProductID | Sale Price |  Cumulative_Amount   | 
'2018-09-12'            1           1          1
'2018-09-12'            2           2          2
'2018-09-13'            1           1          2
'2018-09-13'            2           2          4    

На данный момент мне кажется,чтобы вы усовершенствовали искусство просто иметь один большой общий итог для совокупной суммы, но, похоже, не можете понять, как сделать так, чтобы это сбрасывалось как таковое для каждого продукта.Затраты на продукты и услуги могут меняться и не всегда будут статичными, как указано выше.

Я могу вручную манипулировать и смотреть в excel и т. Д., Но очень хотел бы знать, как это возможно в SQL, чтобы сэкономить время в будущем,любые советы или указатели будут очень цениться.

На данный момент у меня есть следующее:

SELECT
    [TransactionDate],
    [ProductID],
    [SalePrice],
    SUM (ActualSale) over (order by [TransactionDate],[ProductID] rows unbounded preceding) as Cumulative_Amount,    
FROM tTransactions
    WHERE [TransactionDate] BETWEEN '2018-09-10' AND '2018-09-15'

Заранее спасибо.

1 Ответ

0 голосов
/ 01 октября 2018

Вам нужно partition by:

SELECT . . . ,
       SUM(ActualSale) OVER (PARTITION BY ProductId
                             ORDER BY TransactionDate
                            ) as Cumulative_Amount,
FROM tTransactions
WHERE TransactionDate BETWEEN '2018-09-10' AND '2018-09-15';

Обратите внимание, что предложение о создании окон не требуется.По умолчанию RANGE BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW, когда отсутствует.Это может вводить в заблуждение, если у вас есть повторяющиеся даты.Если это проблема, то вы явно включаете рамку окна:

SELECT . . . ,
       SUM(ActualSale) OVER (PARTITION BY ProductId
                             ORDER BY TransactionDate
                             ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW
                            ) as Cumulative_Amount,
FROM tTransactions
WHERE TransactionDate BETWEEN '2018-09-10' AND '2018-09-15';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...