运行 总计(按交易日期和产品 ID)
Running Total by Transaction Date & ProductID
使用 MSSQL17,这是我正在进行的一项探索性工作,按产品和服务查看销售额,运行 一个月的总计。
尝试弄清楚如何有一个查询,在这种情况下按日期和产品 ID 对我的交易 table 中的产品求和,以重新创建如下内容:
-------------------
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'
提前谢谢你。
你需要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
。如果您有重复的日期,这可能会有点误导。如果这是一个问题,那么您可以明确包含 window 框架:
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';
使用 MSSQL17,这是我正在进行的一项探索性工作,按产品和服务查看销售额,运行 一个月的总计。
尝试弄清楚如何有一个查询,在这种情况下按日期和产品 ID 对我的交易 table 中的产品求和,以重新创建如下内容:
-------------------
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'
提前谢谢你。
你需要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
。如果您有重复的日期,这可能会有点误导。如果这是一个问题,那么您可以明确包含 window 框架:
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';