建一个参照表,只存放12个月,然后用这个表left join你的代码,没有匹配上的月份就会为null,然后用isnull来变成0

解决方案 »

  1.   

    用这个代码可以生成指定日期之间的年月DECLARE @startdate DATETIME ,
        @enddate DATETIME
    SET @startdate = '2008-01-01'
    SET @enddate = '2009-12-31'
    SELECT 
        DISTINCT
            YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
            MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
    FROM    master..spt_values
    WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
            AND number >= 0
            AND type = 'p'
      

  2.   

    使用此方法须注意,如果超过了2506天就有问题了(master..spt_values最多有2506笔记录)
      

  3.   


    DECLARE @startdate DATETIME ,
        @enddate DATETIME
    SET @startdate = '2000-01-01'
    SET @enddate = '2014-12-31' --最多只能产生 2005 8
    SELECT 
        DISTINCT
            YEAR(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [year] ,
            MONTH(CONVERT(VARCHAR(10), DATEADD(day, number, @startdate), 120)) AS [month]
    FROM    master..spt_values
    WHERE   DATEDIFF(day, DATEADD(day, number, @startdate), @enddate) >= 0
            AND number >= 0
            AND type = 'p'
      

  4.   

    2000多行都是20年的数据了。这通常已经不是OLTP要做的统计了
      

  5.   

    版主大人我还问个问题,
    比如现在我有一个with的递归,给他一个参数A,他就能得一些数据集,
    现在我有三个参数,A,B,C
    我想将这三个参数得出的数据集结果合并返回,如何做?