select * from ad_hits where ad_id = '131' and year(hits_date) = '2006' and 
month(hits_date) = '6' order by hits_date
======================================================
用上面的搜索语句,得到下面的结果..
131 2006-06-01 00:00:00 1
131 2006-06-02 00:00:00 2
131 2006-06-03 00:00:00 1
131 2006-06-05 00:00:00 2
131 2006-06-06 00:00:00 5
131 2006-06-07 00:00:00 1
131 2006-06-10 00:00:00 1
131 2006-06-14 00:00:00 2
==================================
我想得到这样的结果..
131 2006-06-01 00:00:00 1
131 2006-06-02 00:00:00 2
131 2006-06-03 00:00:00 1
131 2006-06-04 00:00:00 0
131 2006-06-05 00:00:00 2
131 2006-06-06 00:00:00 5
131 2006-06-07 00:00:00 1
131 2006-06-08 00:00:00 0
131 2006-06-09 00:00:00 0
131 2006-06-10 00:00:00 1
131 2006-06-11 00:00:00 0
131 2006-06-12 00:00:00 0
131 2006-06-13 00:00:00 0
131 2006-06-14 00:00:00 2就是,如果当天的点击数为O则自动列出为0记录...

解决方案 »

  1.   

    那个记录数据库里面没有,能不能用sql语句给补上??
      

  2.   

    --生成测试数据
    DECLARE @tb TABLE(ID INT,YourDate DATETIME,NUM INT)
    INSERT @tb
    SELECT 
    131, '2006-06-01 00:00:00' ,1
    UNION SELECT
    131, '2006-06-02 00:00:00' ,2
    UNION SELECT
    131, '2006-06-03 00:00:00' ,1
    UNION SELECT
    131, '2006-06-05 00:00:00' ,2
    UNION SELECT
    131, '2006-06-06 00:00:00' ,5
    UNION SELECT
    131, '2006-06-07 00:00:00' ,1
    UNION SELECT
    131, '2006-06-10 00:00:00' ,1
    UNION SELECT
    131, '2006-06-14 00:00:00' ,2
    --生成临时数据
    DECLARE @MinDate Datetime,@MaxDate Datetime
    SELECT @MinDate=MIN(YourDate),@MaxDate=MAX(YourDate) FROM @tb
    DECLARE @Tmp Table(Num1 INT,TmpDate DateTime,Num2 INT)
    WHILE @MinDate<@MaxDate
    BEGIN
    INSERT @Tmp VALUES(131,DATEADD(dd,1,@MinDate),0)
    SET @MinDate=DATEADD(dd,1,@MinDate)
    END--显示所需结果
    SELECT * FROM @tb
    UNION
    SELECT * FROM @Tmp WHERE TmpDate NOT IN(SELECT YourDate FROM @tb)
      

  3.   

    Create Table ad_hits
    (ad_id Varchar(3),
     hits_date DateTime,
     hits Int)
    Insert ad_hits Select '131', '2006-06-01 00:00:00', 1
    Union All Select'131', '2006-06-02 00:00:00', 2
    Union All Select'131', '2006-06-03 00:00:00', 1
    Union All Select'131', '2006-06-05 00:00:00', 2
    Union All Select'131', '2006-06-06 00:00:00', 5
    Union All Select'131', '2006-06-07 00:00:00', 1
    Union All Select'131', '2006-06-10 00:00:00', 1
    Union All Select'131', '2006-06-14 00:00:00', 2
    GO
    Select TOP 31 ID=Identity(Int,1,1) Into # From syscolumns,SysObjectsSelect Distinct
    IsNull(A.ad_id,'131') As ad_id,
    B.hits_date,
    IsNull(hits,0) As hits
    From 
    (Select DateAdd(dd,ID-1,(Select Min(hits_date) From ad_hits)) As hits_date From #) B
    Left Join 
    ad_hits A
    On A.hits_date=B.hits_date
    And ad_id = '131' and year(A.hits_date) = '2006' and month(A.hits_date) = '6'
    Where B.hits_date<=(Select Max(hits_date) From ad_hits)
    order by B.hits_date
    GO
    Drop Table ad_hits,#
    --Result
    /*
    ad_id hits_date hits
    131 2006-06-01 00:00:00.000 1
    131 2006-06-02 00:00:00.000 2
    131 2006-06-03 00:00:00.000 1
    131 2006-06-04 00:00:00.000 0
    131 2006-06-05 00:00:00.000 2
    131 2006-06-06 00:00:00.000 5
    131 2006-06-07 00:00:00.000 1
    131 2006-06-08 00:00:00.000 0
    131 2006-06-09 00:00:00.000 0
    131 2006-06-10 00:00:00.000 1
    131 2006-06-11 00:00:00.000 0
    131 2006-06-12 00:00:00.000 0
    131 2006-06-13 00:00:00.000 0
    131 2006-06-14 00:00:00.000 2
    */