一天中的所有时段

The*_*r23 5 sql t-sql sql-server

在我的SQL查询中,我计算每天每小时的订单数量.我的查询看起来像这样:

SELECT   COUNT(dbo.Uputa.ID),{ fn HOUR(dbo.Orders.Date) } AS Hour
FROM      Orders       
WHERE dbo.Orders.Date BETWEEN '2011-05-01' AND '2011-05-26' 
GROUP BY { fn HOUR(dbo.Orders.Date) }
ORDER BY Hour
Run Code Online (Sandbox Code Playgroud)

我的问题是查询只返回dbo.Orders.Date中的现有小时数.
例如:

Number   Hour
12         3
12         5
Run Code Online (Sandbox Code Playgroud)

我想像这样返回所有时间:

 Number      Hour
    0          0
    0          1
    0          2
    12         3
    0          4
    12         5
   ...
    0          23
Run Code Online (Sandbox Code Playgroud)

有没有人知道如何做到这一点?

Pau*_*lor 6

使用公用表表达式创建所有小时,然后左键加入分组总计以获得结果.

with mycte as
(
    SELECT 0 AS MyHour
    UNION ALL
    SELECT MyHour + 1
    FROM mycte 
    WHERE MyHour + 1 < 24
)
SELECT mycte.MyHour, COALESCE(OrderCount,0) FROM mycte
LEFT JOIN 
(
    SELECT  COUNT(dbo.Uputa.ID) AS OrderCount,{ fn HOUR(dbo.Orders.Date) } AS MyHour
    FROM    Orders       
    WHERE   dbo.Orders.Date BETWEEN '2011-05-01' AND '2011-05-26' 
    GROUP BY { fn HOUR(dbo.Orders.Date) }
) h
ON
  h.MyHour = mycte.MyHour;
Run Code Online (Sandbox Code Playgroud)