当前位置:  开发笔记 > 数据库 > 正文

SQL group by day,显示每天的订单

如何解决《SQLgroupbyday,显示每天的订单》经验,为你挑选了1个好方法。

我有一个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行)?



1> Timothy Khou..:

SQL不是"跳过"日期...因为查询是针对实际在表中的数据运行的.所以,如果1月14日表中没有DATE,那么为什么SQL会显示结果:)

你需要做的是制作一个临时表,并加入它.

CREATE TABLE #MyDates ( TargetDate DATETIME )
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 0, 101))
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 1, 101))
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 2, 101))
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 3, 101))
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 4, 101))
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 5, 101))
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 6, 101))
INSERT INTO #MyDates VALUES CONVERT(DATETIME, CONVERT(VARCHAR, GETDATE() - 7, 101))

SELECT CONVERT(VARCHAR, TargetDate, 101) AS Date, COUNT(*) AS OrderCount
FROM dbo.Orders INNER JOIN #MyDates ON Orders.Date = #MyDates.TargetDate
GROUP BY blah blah blah (you know the rest)

你去!

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有