总销量,每个日期的MTD销量

时间:2019-05-13 02:40:22

标签: sql-server

需要显示2019年6月13日至2019年6月27日之间每个日期的总销售额以及每个日期的MTD销售额(2019年6月1日-当前日期)。

这是我的查询

select date, sum(sales) as 'Daily Sales', 
sum(sales) over (partition by datepart(month, date) order by date ROWS between unbounded preceding and current row) as 'MTD Sales' 
from Orders 
where date between '13/06/2019' and '27/06/2019'
group by date;

在添加where子句后,当我希望MTD运转总额从1号开始时,它将更改MTD销售额以仅从13号开始显示运转总额。

这是所需的输出:

Date    | Daily Sales | MTD Sales
---------------------------------
13 June | 200         | 700
15 June | 300         | 1000
20 June | 500         | 1500

1 个答案:

答案 0 :(得分:2)

由于在计算where子句之后在 之后计算的窗口函数,您必须将其作为两个查询执行。这是一个示例:

;with [MTD sales] as (
    select date, sum(sales) as 'Daily Sales', 
    sum(sales) over (partition by datepart(month, date) order by date ROWS between unbounded preceding and current row) as 'MTD Sales' 
    from Orders 
    group by date;
)
select *
from [MTD sales]
where date between '13/06/2019' and '27/06/2019'

这将使用CTE来计算正确的日期总和,然后在运行正确的计算后将过滤应用于第二步。