解决方案 »

  1.   


    我自己把这类问题叫做“断点补全”,每个问题都有自己的特点,有不少类似的问题,
    但是这类问题归根结底就是连续数据中间有“断点”
    这里只提供个思路,就是先按照原始规律生成一张包含连续数据的表,然后再外连接
    楼主可以参考这个,论坛上很多类似的问题
    http://bbs.csdn.net/topics/390781130
      

  2.   


    create table #TA([DWeek] varchar(10),[Itemid] VARCHAR(10),[Qty] int)insert #TA 
    select 'W201420','A001',5 
    union all select 'W201421','A001',1 
    union all select 'W201422','A001',2 
    union all select 'W201426','A001',3 
    union all select 'W201427','A001',4 
    union all select 'W201430','A001',5 
    union all select 'W201421','A002',100 
    union all select 'W201429','A002',6 
    union all select 'W201430','A002',7 
    union all select 'W201431','A002',8 
    union all select 'W201432','A002',9 
    union all select 'W201433','A002',10 
    union all select 'W201437','A003',11 
    select a.DWeek,b.Itemid,isnull(c.Qty,0) 'Qty'
    from
    (select 'W2014'+rtrim(number) 'DWeek'
     from master.dbo.spt_values
     where type='P' 
     and number between (select min(right(DWeek,2)) from #TA)
                and (select max(right(DWeek,2)) from #TA)) a
    cross join (select distinct Itemid from #TA) b
    left join #TA c on a.DWeek=c.DWeek and b.Itemid=c.Itemid
    order by b.Itemid,a.DWeek/*
    DWeek             Itemid     Qty
    ----------------- ---------- -----------
    W201420           A001       5
    W201421           A001       1
    W201422           A001       2
    W201423           A001       0
    W201424           A001       0
    W201425           A001       0
    W201426           A001       3
    W201427           A001       4
    W201428           A001       0
    W201429           A001       0
    W201430           A001       5
    W201431           A001       0
    W201432           A001       0
    W201433           A001       0
    W201434           A001       0
    W201435           A001       0
    W201436           A001       0
    W201437           A001       0
    W201420           A002       0
    W201421           A002       100
    W201422           A002       0
    W201423           A002       0
    W201424           A002       0
    W201425           A002       0
    W201426           A002       0
    W201427           A002       0
    W201428           A002       0
    W201429           A002       6
    W201430           A002       7
    W201431           A002       8
    W201432           A002       9
    W201433           A002       10
    W201434           A002       0
    W201435           A002       0
    W201436           A002       0
    W201437           A002       0
    W201420           A003       0
    W201421           A003       0
    W201422           A003       0
    W201423           A003       0
    W201424           A003       0
    W201425           A003       0
    W201426           A003       0
    W201427           A003       0
    W201428           A003       0
    W201429           A003       0
    W201430           A003       0
    W201431           A003       0
    W201432           A003       0
    W201433           A003       0
    W201434           A003       0
    W201435           A003       0
    W201436           A003       0
    W201437           A003       11(54 row(s) affected)
    */