declare @year varchar(4)
set @year='2005'select
    日期=isull(a.日期,b.日期),
    采购=isnull(a.金额,0),
    出售=isnull(b.金额,0),
    差额=isnull(b.金额,0)-isnull(a.金额,0)
from
    (select 日期=convert(char(7),日期,120),金额=sum(金额) from 采购表 group by convert(char(7),日期,120)) a
full outer join
    (select 日期=convert(char(7),日期,120),金额=sum(金额) from 出售表 group by convert(char(7),日期,120)) b
on
    a.日期=b.日期
where
    left(isull(a.日期,b.日期),4)=@year
order by
    日期

解决方案 »

  1.   

    要求跟据 "@年" 为条件进行分别对采购表,出售表进行查询得到 @年+1月,@年+2月,.....@年+12月
    的分别对每个月的采购和出售情况统计! 并计算出每月的差额.
    需要结果:
    日期:          采购(金额合计)          出售(金额合计)       差额(=出售金额-采购金额)
    2005年01月     34                      0                    -34
    2005年02月     35                      11                   -24
    2005年03月     23                      23                   0
    2005年04月     23                      12                   -11
    2005年05月     0                       76                   76
    2005年06月     0                       23                   23
    2005年07月     0                       23                   23
    2005年08月     0                       0                   0
    2005年09月     0                       0                   0
    2005年10月     0                       0                   0
    2005年11月     0                       0                   0
    2005年12月     0                       0                   0
    如果采购金额和出售金额都为0 也显示出来呢?应如何定SQL文?
      

  2.   

    set rowcount 12
    select identity(int,1,1) as id into #T from sysobjects
    set rowcount 0declare @year varchar(4)
    set @year='2005'select
        日期=isull(a.日期,b.日期),
        采购=isnull(a.金额,0),
        出售=isnull(b.金额,0),
        差额=isnull(b.金额,0)-isnull(a.金额,0)
    from
        (select (@year+'-'+right('0'+rtrim(id),2)) as 日期 from #T) a
    left join
        (select 日期=convert(char(7),日期,120),金额=sum(金额) from 采购表 group by convert(char(7),日期,120)) b
    on
        a.日期=b.日期
    left join
        (select 日期=convert(char(7),日期,120),金额=sum(金额) from 出售表 group by convert(char(7),日期,120)) c
    on
        a.日期=c.日期
    where
        left(isull(a.日期,b.日期),4)=@year
    order by
        日期
      

  3.   

    你真牛,真是太谢谢你的..我对SQL不太精通.只会一些基本的语句!
    以后还要多多请教呀!:)