我有一个 SQL 2005 表,我们称之为 Orders,格式为:
OrderID, OrderDate, OrderAmount
1, 25/11/2008, 10
2, 25/11/2008, 2
3, 30/1002008, 5
然后我需要生成一个报告表,显示过去 7 天内每天的订购量:
Day, OrderCount, OrderAmount
25/11/2008, 2, 12
26/11/2008, 0, 0
27/11/2008, 0, 0
28/11/2008, 0, 0
29/11/2008, 0, 0
30/11/2008, 1, 5
通常会产生这个的 SQL 查询:
select count(*), sum(OrderAmount)
from Orders
where OrderDate>getdate()-7
group by datepart(day,OrderDate)
有一个问题是它会跳过没有订单的日子:
Day, OrderCount, OrderAmount
25/11/2008, 2, 12
30/11/2008, 1, 5
通常我会使用一个计数表和外部连接来解决这个问题,但我真的在寻找一个更简单或更有效的解决方案。对于报表查询来说,这似乎是一个常见的要求,应该已经有一些优雅的解决方案可用。
所以: 1. 这个结果可以通过一个简单的查询而不使用计数表获得吗?
和 2. 如果不是,我们是否可以动态创建这个计数表(可靠)(我可以使用 CTE 创建一个计数表,但递归堆栈将我限制为 100 行)?