我要对一张表的数据根据日期进行统计:
sql语句:
select count(s.id) as total,s.ddate from SaleOrderQ s group by s.ddate order by ddate显示:
111 2009-01-01 00:00:00.000
49 2009-01-02 00:00:00.000
12 2009-01-03 00:00:00.000
3 2009-01-05 00:00:00.000
3 2009-01-06 00:00:00.000
5 2009-01-07 00:00:00.000
6 2009-01-08 00:00:00.000
1 2009-01-09 00:00:00.000
10 2009-01-12 00:00:00.000但中间的日期有没有输入的比如:2009-01-04,2009-01-10,2009-01-11,我想把这些没有输入的日期也用sql显示出来,统计的数量为0,应该如何写。
注意:需要用sql语句,而非创建领时表啊,动态sql啊,因为我只有对数据库读取数据的权限,其他什么都没有。
急需!!!!!

解决方案 »

  1.   


    declare @T table(ddate datetime)
    insert @T select '20090101'
    insert @T select '20090105'
    declare @MinDate datetime,@MaxDate datetime
    select @MinDate=min(ddate),@MaxDate=max(ddate) from @T
    ;with Date
    as
    (select @MinDate as Date
    union all
    select Date+1 from Date where Date<@MaxDate)
    select 
    a.Date,count(b.ddate) as [count]
    from 
    Date a
    left join 
    @T b on a.Date=b.ddate
    group by a.Date
    (1 個資料列受到影響)(1 個資料列受到影響)
    Date                    count
    ----------------------- -----------
    2009-01-01 00:00:00.000 1
    2009-01-02 00:00:00.000 0
    2009-01-03 00:00:00.000 0
    2009-01-04 00:00:00.000 0
    2009-01-05 00:00:00.000 1(5 個資料列受到影響)
      

  2.   

    declare @MaxDate datetime
    declare @MinDate datetime
    declare @T table(dt datetime)
    select  @MaxDate = max(n4), @MinDate= min(n4) from dbo.SaleOrderQ while @MinDate<=@MaxDate
    begin
    insert into @T(dt,cout) values(@MinDate,0)
    set @MinDate=@MinDate+1
    end求出这个集合,然后和你用的那个集合进行连接,求出你的结果