报表动态MTD、YTD查询语句

经常会有报表需要动态查询MTD和YTD汇总。这里解释一下含义:
MTD(Month To Date):从月初到当前日期
YTD(Year To Date):从年初到当前日期

假设有表EmpLeaveCNT(LeaveDate,LeaveCount),代表每个日期的离职人数(如下图所示),现要求查询离职人数每天的MTD和YTD。
报表动态MTD、YTD查询语句_第1张图片

这其实是一个Running Total的问题,方法有非常多,传统可用标量子查询、自连接的方式,如果是SQL Server 2012及以上版本,可以用窗口函数解决:

SELECT 
LeaveDate,LeaveCount
,CONVERT(CHAR(7),DATEADD(DAY,1,EOMONTH(LeaveDate,-1)),120) AS MTD_Month
,SUM(LeaveCount) OVER(PARTITION BY DATEADD(DAY,1,EOMONTH(LeaveDate,-1)) ORDER BY LeaveDate) AS MTD_LeaveCount
,YEAR(DATEADD(YEAR,DATEDIFF(YEAR,0,LeaveDate),0)) AS YTD_Year
,SUM(LeaveCount) OVER(PARTITION BY DATEADD(YEAR,DATEDIFF(YEAR,0,LeaveDate),0) ORDER BY LeaveDate) AS YTD_LeaveCount
FROM EmpLeaveCNT

结果如下:
报表动态MTD、YTD查询语句_第2张图片

你可能感兴趣的:(MSSQL开发-TSQL)