T-SQL查询以汇总所有年份的销售额:每年每月总计,以及每月累计金额

时间:2019-12-09 20:14:45

标签: sql sql-server tsql

我需要创建一个销售报告,其中显示每月的所有年份的销售额以及累计销售额。 数据库表很简单:

Transactions 
(
    ID INT, 
    TransactionDate DATETIME, 
    SalesAmount MONEY
)

我希望结果与下面的ExcelSheet相似(我仅显示2017/2018金额,但实际查询需要根据TransactionDate返回所有可用年份的结果)

enter image description here

3 个答案:

答案 0 :(得分:3)

这是汇总和累加的总和:

select year(TransactionDate), month(TransactionDate),
       sum(SalesAmount),
       sum(sum(SalesAmount)) over (partition by year(TransactionDate) order by min(TransactionDate))
from Transactions
group by year(TransactionDate), month(TransactionDate)
order by year(TransactionDate), month(TransactionDate);

答案 1 :(得分:1)

尝试一下:

With Q 
as
(
   Select DatePart(yyyy,TransactionDate) 'Year',DatePart(m,TransactionDate) 'Month',  sum(SalesAmount) 'Sales'
   From Transactions 
   Group by DatePart(yyyy,TransactionDate),DatePart(m,TransactionDate)
) 
Select q.Year,q.Month,q.sales,( Select sum(q1.Sales)
        From Q q1
        Where q1.Year=q.Year
         And  q1.Month <= q.Month
        ) 'Cumulative Sale'
From Q q
Order by q.Year,q.Month

答案 2 :(得分:0)

尝试一下:

with cte as
(
select year(TransactionDate) as Year, month(TransactionDate) as Month, SalesAmount 

)

 select a.Year, a.Month, a.SalesAmount, sum(b.SalesAmount) as cumulativeSalesAmount 
 from Transactions  a inner join Transactions  b on a.STORE_ID = b.STORE_ID and a.Year = b.Year and a.Month >= b.Month
 group by a.Year, a.Month
 order by 1, 2