在SQL Server中显示选定的日期范围

问题描述 投票:0回答:1

我有一个报告工具,需要以以下格式显示输出,

如果我将开始日期时间选择为2019-01-10 00:00:00,将结束日期时间选择为2019-05-20 00:00:00,

输出如下所示,

enter image description here

下面是我尝试过的查询,但是我只获得开始日期范围或结束日期范围,但是如果我们在过滤器中选择多个月份,则需要显示完整的月份日期范围。>

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月。

希望这可以澄清我的问题。

enter image description here

我有一个报表工具,需要以以下格式显示输出,如果我选择开始日期时间为2019-01-10 00:00:00,选择结束日期时间为2019-05-20 00:00:00 ,输出应如下所示,...

sql-server common-table-expression dynamic-sql date-range
1个回答
0
投票

[我认为问题在于如何分组第一位CTE。您可以尝试这样的事情:

© www.soinside.com 2019 - 2024. All rights reserved.