我有一个报告工具,需要以以下格式显示输出,
如果我将开始日期时间选择为2019-01-10 00:00:00,将结束日期时间选择为2019-05-20 00:00:00,
输出如下所示,
下面是我尝试过的查询,但是我只获得开始日期范围或结束日期范围,但是如果我们在过滤器中选择多个月份,则需要显示完整的月份日期范围。>
DECLARE @StartDate DateTIme DECLARE @EndDate DateTime SET @StartDate='2018-01-26 01:10:00' SET @EndDate='2018-02-27 02:31:00' ;WITH GETMONTHPART(MonthNumber1,MonthNames1,StartDate,EndDate,StartDateMonth,EndDateMonth,DayRange) AS ( SELECT DATEPART(MM,@StartDate) MONTHNUMBER,DATENAME(MONTH,@StartDate) MONTH,@StartDate,@EndDate,CONVERT(VARCHAR(25), DATEADD(dd,-(DAY(@StartDate)-1),@StartDate),101), CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@EndDate))),DATEADD(mm,1,@EndDate)),101), CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(@StartDate)-1),@StartDate),101)+' - '+CONVERT(VARCHAR(25),DATEADD(dd,-(DAY(DATEADD(mm,1,@StartDate))),DATEADD(mm,1,@StartDate)),101) [TotalDaysofMonth] ) , --SELECT * FROM GETMONTHPART CALLSUMMARY (Monthnumber,Monthname,callednumbercount) AS ( SELECT DATEPART(MM,ccd.startdatetime) MONTHNUMBER, DATENAME(MONTH,ccd.startdatetime) MONTH, COUNT(callednumber) FROM table ccd WHERE startdatetime>=@StartDate and startdatetime<@EndDate GROUP BY DATEPART(MM,ccd.startdatetime), DATENAME(MONTH,ccd.startdatetime) ) Select MonthName,DayRange,callednumbercount from CALLSUMMARY, GETMONTHPART ORDER BY Monthnumber,Monthname ASC
这是当前的输出,我现在也知道1月月份的范围也将到达2月,因为DateRange转换仅对@StartDateTime起作用。如果我们将其修改为@EndDateTime,则两个DateRange都将出现在2月。
希望这可以澄清我的问题。
我有一个报表工具,需要以以下格式显示输出,如果我选择开始日期时间为2019-01-10 00:00:00,选择结束日期时间为2019-05-20 00:00:00 ,输出应如下所示,...
[我认为问题在于如何分组第一位CTE。您可以尝试这样的事情: