Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
包括SQL中季度报告中没有数据的季度_Sql_Sql Server - Fatal编程技术网

包括SQL中季度报告中没有数据的季度

包括SQL中季度报告中没有数据的季度,sql,sql-server,Sql,Sql Server,目前,我们正在为指定标准生成季度报告。数据的输出如下所示 "data": [ { "group": "2014-Apr-2014-Jun", "count": 944 }, { "group": "2014-Jan-2014-Mar",

目前,我们正在为指定标准生成季度报告。数据的输出如下所示

"data":
           [
               {
                   "group": "2014-Apr-2014-Jun",
                   "count": 944
               },
               {
                   "group": "2014-Jan-2014-Mar",
                   "count": 154
               },
               {
                   "group": "2013-Oct-2013-Dec",
                   "count": 895
               }
           ]
我们需要进行更改,以包括没有任何数据的季度,输出如下所示

"data":
               [
                   {
                       "group": "2014-Oct-2014-Dec",
                       "count": 0
                   },
                   {
                       "group": "2014-Jul-2014-Sep",
                       "count": 0
                   },
                   {
                       "group": "2014-Apr-2014-Jun",
                       "count": 944
                   },
                   {
                       "group": "2014-Jan-2014-Mar",
                       "count": 154
                   },
                   {
                       "group": "2013-Oct-2013-Dec",
                       "count": 895
                   }
               ]
下面是我用来生成此报告的查询

SELECT cast(year([job].jobdate) AS VARCHAR(4)) + '-' + -- gives year
       cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, [job].jobdate), 0)), 3) AS VARCHAR(3)) + '-' + -- gives start month of the quarter
       cast(year([job].jobdate) AS VARCHAR(4)) + '-' +  -- gives year
       cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, [job].jobdate) + 1, 0))), 3) AS VARCHAR(3)) AS 'group' -- gives end month of the quarter
    ,count([job].bgtjobid) AS 'count'
FROM dbo.job [job] WITH (NOLOCK)
WHERE (
        [job].jobdate >= '2013-10-01'
        AND [job].jobdate <= '2014-12-31'
        )
    AND (1 = 1)
GROUP BY cast(year([job].jobdate) AS VARCHAR(4)) + '-' + 
            cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, [job].jobdate), 0)), 3) AS VARCHAR(3)) + '-' + 
            cast(year([job].jobdate) AS VARCHAR(4)) + '-' + 
            cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, [job].jobdate) + 1, 0))), 3) AS VARCHAR(3))
因为我没有上一季度的数据,所以现在它被排除在外。我需要进行查询,以将上一季度的数据包含在0中

|             GROUP | COUNT |
|-------------------|-------|
| 2013-Oct-2013-Dec |     3 |
| 2014-Apr-2014-Jun |     2 |
| 2014-Jan-2014-Mar |     3 |
| 2014-Jul-2014-Sep |     3 |
| 2014-Oct-2014-Dec |     0 |

提前谢谢

只需运行以下代码即可获得所需的结果。另外,如果要更改生成报告的日期范围,请更改@start和@end日期

DECLARE @start DATETIME, @end DATETIME

SET @start = '2013-10-01'
SET @end = '2014-12-31'

;WITH cte AS 
(
    SELECT dt = DATEADD(DAY, -(DAY(@start) - 1), @start)

    UNION ALL

    SELECT DATEADD(MONTH, 1, dt)
    FROM cte
    WHERE dt < DATEADD(DAY, -(DAY(@end) - 1), @end)
)

SELECT Group1, Sum(count1) AS Count
FROM
(
SELECT cast(year([job].jobdate) AS VARCHAR(4)) + '-' + -- gives year
       cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, [job].jobdate), 0)), 3) AS VARCHAR(3)) + '-' + -- gives start month of the quarter
       cast(year([job].jobdate) AS VARCHAR(4)) + '-' +  -- gives year
       cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, [job].jobdate) + 1, 0))), 3) AS VARCHAR(3)) AS 'group1' -- gives end month of the quarter
    ,count([job].bgtjobid) AS 'count1'
FROM job [job] WITH (NOLOCK)
WHERE (
        [job].jobdate >= @start
        AND [job].jobdate <= @end
        )
    AND (1 = 1)
GROUP BY cast(year([job].jobdate) AS VARCHAR(4)) + '-' + 
            cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, [job].jobdate), 0)), 3) AS VARCHAR(3)) + '-' + 
            cast(year([job].jobdate) AS VARCHAR(4)) + '-' + 
            cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, [job].jobdate) + 1, 0))), 3) AS VARCHAR(3))
UNION
  select distinct cast(year(dt) AS VARCHAR(4)) + '-' + -- gives year
       cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, dt), 0)), 3) AS VARCHAR(3)) + '-' + -- gives start month of the quarter
       cast(year(dt) AS VARCHAR(4)) + '-' +  -- gives year
       cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, dt) + 1, 0))), 3) AS VARCHAR(3)) AS 'group1' -- gives end month of the quarter
    ,0 AS 'count1'
FROM cte
) as A
GROUP BY  Group1

使用当前查询添加sqlfiddler示例数据。那么只有一种方法可以检查它。@Veera我以前没有使用过SQL FIDLE。但是自从你问起就创建了一个,请检查更新后的URL问题。请让我知道如果您需要任何其他信息从您的sql Fiddler链接我更新了结果。核实一下
DECLARE @start DATETIME, @end DATETIME

SET @start = '2013-10-01'
SET @end = '2014-12-31'

;WITH cte AS 
(
    SELECT dt = DATEADD(DAY, -(DAY(@start) - 1), @start)

    UNION ALL

    SELECT DATEADD(MONTH, 1, dt)
    FROM cte
    WHERE dt < DATEADD(DAY, -(DAY(@end) - 1), @end)
)

SELECT Group1, Sum(count1) AS Count
FROM
(
SELECT cast(year([job].jobdate) AS VARCHAR(4)) + '-' + -- gives year
       cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, [job].jobdate), 0)), 3) AS VARCHAR(3)) + '-' + -- gives start month of the quarter
       cast(year([job].jobdate) AS VARCHAR(4)) + '-' +  -- gives year
       cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, [job].jobdate) + 1, 0))), 3) AS VARCHAR(3)) AS 'group1' -- gives end month of the quarter
    ,count([job].bgtjobid) AS 'count1'
FROM job [job] WITH (NOLOCK)
WHERE (
        [job].jobdate >= @start
        AND [job].jobdate <= @end
        )
    AND (1 = 1)
GROUP BY cast(year([job].jobdate) AS VARCHAR(4)) + '-' + 
            cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, [job].jobdate), 0)), 3) AS VARCHAR(3)) + '-' + 
            cast(year([job].jobdate) AS VARCHAR(4)) + '-' + 
            cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, [job].jobdate) + 1, 0))), 3) AS VARCHAR(3))
UNION
  select distinct cast(year(dt) AS VARCHAR(4)) + '-' + -- gives year
       cast(left(datename(month, DATEADD(q, DATEDIFF(q, 0, dt), 0)), 3) AS VARCHAR(3)) + '-' + -- gives start month of the quarter
       cast(year(dt) AS VARCHAR(4)) + '-' +  -- gives year
       cast(left(datename(month, dateadd(d, - 1, dateadd(q, DATEDIFF(q, 0, dt) + 1, 0))), 3) AS VARCHAR(3)) AS 'group1' -- gives end month of the quarter
    ,0 AS 'count1'
FROM cte
) as A
GROUP BY  Group1