使用MSSQL17,这是我正在进行的一项探索性工作,它按产品和服务查看销售情况,并计算一个月的总计。
试图弄清楚如何在此实例中按日期和产品ID汇总交易表中我的产品的查询,以重新创建类似的内容:
-------------------
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'
先谢谢您。
答案 0 :(得分:3)
您需要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';
请注意,不需要windowing子句。如果不存在,则默认为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';