报表动态MTD、YTD查询语句
经常会有报表需要动态查询MTD和YTD汇总。这里解释一下含义:
MTD(Month To Date):从月初到当前日期
YTD(Year To Date):从年初到当前日期
假设有表EmpLeaveCNT(LeaveDate,LeaveCount),代表每个日期的离职人数(如下图所示),现要求查询离职人数每天的MTD和YTD。
这其实是一个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
结果如下: