簡體   English   中英

T-SQL 查詢匯總每年每月的總數,以及迄今為止的累計金額

[英]T-SQL query to summarize total per month per year, and cumulative amounts to date

我有一個捕獲每個銷售交易的數據庫表:

Transactions 
(
    ID INT, 
    TransactionDate DATETIME, 
    SalesAmount MONEY
)

我想編寫一個返回報告的T-SQL查詢(下面的快照示例)。 第一列列出月份,下一列列出一年內每月的總銷售額,最后一列該年截至本月的累計金額。 僅適用於 2018 年。

任何想法或解決方案? 謝謝你。

在此處輸入圖片說明

嘗試這個:

;with cte as
( 
   Select 
   YEAR(TransactionDate) as [Year],
   MONTH(TransactionDate) as [Month],  
   SUM (SalesAmount) as [MonthlySales], 
   DATEPART(m, TransactionDate) as [MonthNumber] 
   from Transactions 
   group by YEAR(TransactionDate), MONTH(TransactionDate)
) 
select 
a.[Month], a.MonthlySales as [MonthlySales 2018], SUM(b.MonthlySales) as [Cumulative 2018]
from cte a inner join cte b on a.MonthNumber  >= b.MonthNumber 
WHERE (a.[Year]) = 2018   AND  (b.[Year]) = 2018  
group by a.[Month], a.MonthlySales
ORDER by a.[Month]

試試這個:

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,( 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

您將使用聚合和窗口函數:

select datename(month, transaction_date) as mon,
       sum(salesAmount) as monthly_sales,
       sum(salesAumount) over (order by min(transaction_date)) as running_amount
from transactions t
where t.transaction_date >= '2018-01-01' and
      t.transaction_date < '2019-01-01'
group by datename(month, transaction_date)
order by min(transaction_date);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM