月份差异没有附加表

时间:2017-06-18 11:23:25

标签: sql-server sql-server-2008

我是SQL查询世界的新手,并且遇到了一个要求。

在我的查询中,我有toDatefromdate输入参数,根据业务逻辑,它将返回如下结果。

结果: -

Month
Dec-16
Dec-16
Dec-16
Feb-17
Feb-17
Mar-17
Mar-17

现在查询应该需要返回每个月的数据,如果我们没有特定月份的数据(在图像中是Jan)那么它应该插入数据并返回该月的数据,在图像中我们可以看到Jan我们没有任何数据。

2 个答案:

答案 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;