SQL组按日,每天显示订单
发布时间:2020-12-12 16:28:24 所属栏目:MsSql教程 来源:网络整理
导读:我有一个SQL 2005表,让我们称之为Orders,格式如下: OrderID,OrderDate,OrderAmount1,25/11/2008,102,23,30/1002008,5 然后我需要生成一份报表,显示过去7天每天的订单量: Day,OrderCount,OrderAmount25/11/2008,2,1226/11/2008,0 27/11/2008,0 28/11/2008,02
我有一个SQL 2005表,让我们称之为Orders,格式如下:
OrderID,OrderDate,OrderAmount 1,25/11/2008,10 2,2 3,30/1002008,5 然后我需要生成一份报表,显示过去7天每天的订单量: Day,OrderCount,OrderAmount 25/11/2008,2,12 26/11/2008,0 27/11/2008,0 28/11/2008,0 29/11/2008,0 30/11/2008,1,5 通常会产生以下SQL查询: select count(*),sum(OrderAmount) from Orders where OrderDate>getdate()-7 group by datepart(day,OrderDate) 有一个问题,它会跳过没有订单的日子: Day,12 30/11/2008,5 通常情况下,我会使用tally表和外部连接来解决这个问题,但是我真的在寻找一个更简单或更有效的解决方案.对于报告查询来说,似乎已经有一些优雅的解决方案应该可用. 所以:1.这个结果可以从一个简单的查询获得,而不使用统计表? 和2.如果否,我们可以即时创建这个tally表(可靠的)(我可以使用CTE创建一个统计表,但递归堆栈将我限制为100行)? 解决方法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,GETDATE() - 1,GETDATE() - 2,GETDATE() - 3,GETDATE() - 4,GETDATE() - 5,GETDATE() - 6,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) 你去! (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |