【发布时间】:2018-12-19 20:18:26
【问题描述】:
我正在处理一个大致如下所示的销售订单表 (ORDER)(2018 年 12 月 20 日更新以更接近我的实际数据集):
SOID SOLINEID INVOICEDATE SALESAMOUNT AC
5 1 2018-11-30 100.00 01
5 2 2018-12-05 50.00 02
4 1 2018-12-12 25.00 17
3 1 2017-12-31 75.00 03
3 2 2018-01-03 25.00 05
2 1 2017-11-25 100.00 17
2 2 2017-11-27 35.00 03
1 1 2017-11-20 15.00 08
1 2 2018-03-15 30.00 17
1 3 2018-04-03 200.00 05
我可以按 SOID 和 SOLINEID 计算平均销售额:
SELECT SUM(SALESAMOUNT) / COUNT(DISTINCT SOID) AS 'Total Sales per Order ($)',
SUM(SALESAMOUNT) / COUNT(SOLINEID) AS 'Total Sales per Line ($)'
FROM ORDER
这似乎提供了一个非常好的答案,但我得到了一个额外的限制,即这个计数是按年和月计算的。我以为我可以简单地添加
GROUP BY YEAR(INVOICEDATE), MONTH(MONTH)
但这会聚合 SOID,然后执行 COUNT(DISTINCT SOID)。这成为跨越多个月出现的 SOID 的问题,这很常见,因为我们在发货时开具发票。
我想得到这样的东西:
Year Month Total Sales Per Order Total Sales Per Line
2018 11 0.00
最痛心的一点是,如果 SOID 跨越多个,我需要某种方式来定义 SOID 将在哪个月份和年份聚合;为此,我会使用 MAX(INVOICEDATE)。
但是,我只是不确定如何解决这个问题。和?子查询?还有什么?我将不胜感激任何帮助,即使它只是指向正确的方向。
【问题讨论】:
标签: sql sql-server sql-server-2012 count distinct