每小时的结果,即使在SQL Server上为0

每小时的结果,即使在SQL Server上为0,sql,sql-server,Sql,Sql Server,我有一个查询,可以得到每小时的通话次数。从这个查询中,我得到了一个很好的结果,但是当“weekendTotals”和“weekTotals”为0时,它会忽略特定的小时数。这家商店从8点到22点营业。如何显示两个值均为零的小时数 我的SQL查询: SELECT DATEPART(hour, CTime) AS Hour, COUNT(CASE WHEN DATEPART(dw, CDate) IN (5, 6) THEN 1 END) AS WeekendTotals,

我有一个查询,可以得到每小时的通话次数。从这个查询中,我得到了一个很好的结果,但是当“weekendTotals”和“weekTotals”为0时,它会忽略特定的小时数。这家商店从8点到22点营业。如何显示两个值均为零的小时数

我的SQL查询:

SELECT 
    DATEPART(hour, CTime) AS Hour,
    COUNT(CASE WHEN DATEPART(dw, CDate) IN (5, 6) THEN 1 END) AS WeekendTotals,
    COUNT(CASE WHEN DATEPART(dw, CDate) NOT IN (5, 6) THEN 1 END) AS WeekTotals
FROM 
    [Example]
WHERE 
    DATEPART(YEAR, [CDate]) = @Jaar 
    AND DATEPART(MONTH, [CDate]) = @Maand
GROUP BY 
    DATEPART(hour, CTime)
ORDER BY 
    1 ,2
一些结果:

+------+---------------+------------+
| Hour | WeekendTotals | WeekTotals |
+------+---------------+------------+
|    8 |             0 |          4 |
|    9 |             2 |          1 |
|   10 |             8 |          2 |
|   11 |             6 |         10 |
|   12 |             1 |          4 |
|   13 |             3 |          3 |
|   14 |             3 |          5 |
|   15 |             6 |          3 |
|   16 |             4 |          4 |
|   17 |             2 |          3 |
|   18 |             1 |          1 |
|   19 |             1 |          0 |
+------+---------------+------------+

编辑问题添加一些示例数据&期望的结果会有帮助。Calendar-file LEFT JOIN aggregate ON hour.Yep-使用SQLFIDLE-创建表格-添加一些带有插入的数据,然后添加查询。然后链接sqlfiddle.adding示例表的示例数据。这将增加对解决问题的兴趣。这给了我与上面结果完全相同的结果。但是你的建议给了我一个主意。我使用的是Stimulsoft,所以我在您的查询开始时创建了一个空表<代码>从sys.all\u列中选择(按对象\u id排序)-1+8上方的顶部(22-8+1)行\u编号()然后在Stimulsoft中将这些链接到一起。谢谢
WITH hourset (h)
AS (SELECT TOP (22 - 8 + 1)
           ROW_NUMBER() OVER (ORDER BY object_id) - 1 + 8
    FROM sys.all_columns)
SELECT hourset.h AS [Hour], 
    COUNT(CASE WHEN DATEPART(dw, e.CDate) IN (5, 6) THEN 1 END) AS WeekendTotals,
    COUNT(CASE WHEN DATEPART(dw, e.CDate) NOT IN (5, 6) THEN 1 END) AS WeekTotals
FROM hourset 
LEFT JOIN [Example] e ON hourset.h = DATEPART(HOUR, e.cTime)
WHERE 
    e.cTime IS NULL or
    (DATEPART(YEAR, [CDate]) = @Jaar 
    AND DATEPART(MONTH, [CDate]) = @Maand)
GROUP BY hourset.h
ORDER BY 1,2;