create table tab(日期 datetime,销售额 int)
go
declare @i int
set @i=1
while @i<=90
begin
insert tab(日期,销售额)
values(dateadd(day,@i,'2007-03-01'),@i*10)
set @i=@i+1
end
go
select * from tab
godeclare @bDate datetime
declare @eDate datetimeset @bDate='2007-05-01'
set @eDate='2007-05-30'
select a.日期,a.销售额,[上月销售额]=b.销售额,[上两月销售额]=c.销售额
from tab a,
(select 日期=dateadd(month,1,日期),销售额 from (select 日期,销售额 from tab where 日期 between dateadd(month,-1,@bDate) and dateadd(month,-1,@eDate)) k) b,
(select 日期=dateadd(month,2,日期),销售额 from (select 日期,销售额 from tab where 日期 between dateadd(month,-2,@bDate) and dateadd(month,-2,@eDate)) k) c
where a.日期=b.日期 and a.日期=c.日期 and a.日期 between @bDate and @eDate
go

解决方案 »

  1.   

    declare @bDate datetime
    declare @eDate datetimeset @bDate='2007-05-01'
    set @eDate='2007-05-30'
    select a.日期,a.销售额,[上月销售额]=isnull(b.销售额,0),[上两月销售额]=isnull(c.销售额,0)
    from tab a 
    left join 
    (select 日期=dateadd(month,1,日期),销售额 from (select 日期,销售额 from tab where 日期 between dateadd(month,-1,@bDate) and dateadd(month,-1,@eDate)) k) b on a.日期=b.日期
    left join
    (select 日期=dateadd(month,2,日期),销售额 from (select 日期,销售额 from tab where 日期 between dateadd(month,-2,@bDate) and dateadd(month,-2,@eDate)) k) c on a.日期=c.日期
    where  a.日期 between @bDate and @eDate
    go
      

  2.   

    找一个月31天都有的,然后 LEFT JOIN