我是SQL查询世界的新手,并且遇到了一个要求。
在我的查询中,我有toDate
和fromdate
输入参数,根据业务逻辑,它将返回如下结果。
结果: -
Month
Dec-16
Dec-16
Dec-16
Feb-17
Feb-17
Mar-17
Mar-17
现在查询应该需要返回每个月的数据,如果我们没有特定月份的数据(在图像中是Jan)那么它应该插入数据并返回该月的数据,在图像中我们可以看到Jan我们没有任何数据。
答案 0 :(得分:1)
您可以使用日历或日期表进行此类操作。
如果没有日历表,您可以使用common table expression生成一组特殊的月份:
declare @fromdate date = '20161201';
declare @todate date = '20170301';
;with n as (select n from (values(0),(1),(2),(3),(4),(5),(6),(7),(8),(9)) t(n))
, Months as (
select top (datediff(month, @fromdate, @todate)+1)
[Month]=convert(date,dateadd(month,row_number() over(order by (select 1))-1,@fromdate))
from n as deka cross join n as hecto cross join n as kilo
order by [Month]
)
/* your query here: */
select
d.[Month]
, sum_col = sum(t.col)
from Months
left join tbl t
on d.[Month] = t.[Month]
group by d.[Month]
数字和日历表参考:
答案 1 :(得分:0)
解决了查询: -
Declare @customDate DATETIME
declare @datafound integer
set @customDate = @fromDate
WHILE @customDate < @toDate
BEGIN
select @datafound = count(1) from @temp where datepart(month, MonthDate) = datepart(month, @customDate)
if @datafound = 0
select Format(@customDate,'MMM-yy') as Month
SET @customDate = DATEADD(month, 1,@customDate)
END;