需求很简单,就是统计一年以来每天的订单量,一开始以为很简单,group by 日期下就好了,但发现很多天的订单量是0,于是那天就没有统计进去,求一个方法,如果订单量是0,那也要显示出来,日期,订单量(0)
group?by? group?by 日期
------解决方案--------------------
这里需要一个参照表,这个表最少包含一列连续的没有截断的日期,然后假设这个表为a
select a.日期,isnull(b.订单量,0) 订单量
from a left join (你一开始的语句) b on a.日期=b.日期
------解决方案--------------------
不错 测试了,可行,下面是网上找到生成日期表的语句
CREATE TABLE [dbo].[time_dimension] (
[time_id] [int] IDENTITY (1, 1) NOT NULL ,
[the_date] [datetime] NULL ,
[the_day] [nvarchar] (15) NULL ,
[the_month] [nvarchar] (15) NULL ,
[the_year] [smallint] NULL ,
[day_of_month] [smallint] NULL ,
[week_of_year] [smallint] NULL ,
[month_of_year] [smallint] NULL ,
[quarter] [nvarchar] (2) NULL ,
[fiscal_period] [nvarchar] (20) NULL
) ON [PRIMARY]
DECLARE @WeekString varchar(12),
@dDate SMALLDATETIME,
@sMonth varchar(20),
@iYear smallint,
@iDayOfMonth smallint,
@iWeekOfYear smallint,
@iMonthOfYear smallint,
@sQuarter varchar(2),
@sSQL varchar(100),
@adddays int
SELECT @adddays = 1 --日期增量(可以自由设定)
SELECT @dDate = '01/01/2002 ' --开始日期
WHILE @dDate < '12/31/2004 ' --结束日期
BEGIN
SELECT @WeekString = DATENAME (dw, @dDate)
SELECT @sMonth=DATENAME(mm,@dDate)
SELECT @iYear= DATENAME (yy, @dDate)