select 学号=isnull(a.学号,b.学号)
,年级=isnull(a.年级,b.年级)
,书费=sum(a.书费)
,杂费=sum(a.杂费)
,学费=sum(b.学费)
,总费用=sum(isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0))
from A表 a 
full join B表 b on a.学号=b.学号

解决方案 »

  1.   

    --上面的语句忘了写group,改一下:
    select 学号=isnull(a.学号,b.学号)
    ,年级=isnull(a.年级,b.年级)
    ,书费=sum(a.书费)
    ,杂费=sum(a.杂费)
    ,学费=sum(b.学费)
    ,总费用=sum(isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0))
    from A表 a 
    full join B表 b on a.学号=b.学号
    group by isnull(a.学号,b.学号),isnull(a.年级,b.年级)
      

  2.   

    --上面的语句考虑了可能某个学号只在一个表中出现的情况,如果每个学号都会在两个表中出现,就用:select a.学号,a.年级
    ,书费=sum(a.书费)
    ,杂费=sum(a.杂费)
    ,学费=sum(b.学费)
    ,总费用=sum(isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0))
    from A表 a join B表 b on a.学号=b.学号
    group by a.学号,a.年级
      

  3.   

    --没有经过详细考虑,上面的是错的.正确的应该是:--方法1,每个学号都会在两个表中出现的处理方法
    select a.*,b.学费,总费用=a.书费+a.杂费+b.学费
    from(
    select 学号,年级,书费=sum(书费),杂费=sum(杂费)
    from @A表 group by 学号,年级
    ) a join(
    select 学号,年级,学费=sum(学费)
    from @B表 group by 学号,年级
    ) b on a.学号=b.学号 and a.年级=b.年级
    --方法2,可能某个学号只在一个表中出现的情况
    select 学号=isnull(a.学号,b.学号)
    ,年级=isnull(a.年级,b.年级)
    ,书费=isnull(a.书费,0)
    ,杂费=isnull(a.杂费,0)
    ,学费=isnull(b.学费,0)
    ,总费用=isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0)
    from(
    select 学号,年级,书费=sum(书费),杂费=sum(杂费)
    from @A表 group by 学号,年级
    ) a join(
    select 学号,年级,学费=sum(学费)
    from @B表 group by 学号,年级
    ) b on a.学号=b.学号 and a.年级=b.年级
      

  4.   

    --下面是数据测试:--创建数据测试环境
    declare @A表 table(学号 int,年级 int,学期 int,书费 int,杂费 int)
    insert into @A表
    select 1,1,1,100,50
    union all select 1,1,2,200,50
    union all select 2,1,1,150,30
    union all select 2,1,2,200,80declare @B表 table(学号 int,年级 int,学费 int)
    insert into @B表
    select 1,1,500
    union all select 2,1,300--方法1,可能某个学号只在一个表中出现的情况
    select a.*,b.学费,总费用=a.书费+a.杂费+b.学费
    from(
    select 学号,年级,书费=sum(书费),杂费=sum(杂费)
    from @A表 group by 学号,年级
    ) a join(
    select 学号,年级,学费=sum(学费)
    from @B表 group by 学号,年级
    ) b on a.学号=b.学号 and a.年级=b.年级--方法2,可能某个学号只在一个表中出现的情况
    select 学号=isnull(a.学号,b.学号)
    ,年级=isnull(a.年级,b.年级)
    ,书费=isnull(a.书费,0)
    ,杂费=isnull(a.杂费,0)
    ,学费=isnull(b.学费,0)
    ,总费用=isnull(a.书费,0)+isnull(a.杂费,0)+isnull(b.学费,0)
    from(
    select 学号,年级,书费=sum(书费),杂费=sum(杂费)
    from @A表 group by 学号,年级
    ) a join(
    select 学号,年级,学费=sum(学费)
    from @B表 group by 学号,年级
    ) b on a.学号=b.学号 and a.年级=b.年级
    /*--测试结果:学号          年级          书费          杂费          学费          总费用         
    ----------- ----------- ----------- ----------- ----------- ----------- 
    1           1           300         100         500         900
    2           1           350         110         300         760(所影响的行数为 2 行)学号          年级          书费          杂费          学费          总费用         
    ----------- ----------- ----------- ----------- ----------- ----------- 
    1           1           300         100         500         900
    2           1           350         110         300         760(所影响的行数为 2 行)
    --*/
      

  5.   


    create table t1(学号 int,年级 int,学期 int,书费 int,杂费 int)
    insert t1 Select   1,       1   ,   1,     100   , 50
    union all select   1 ,      1  ,    2 ,    200  ,  50
    union all select   2  ,     1 ,     1  ,   150 ,   30
    union all select   2   ,    1,      2   ,  200,    80create table t2 (学号 int,年级 int,学费 int)
    insert t2 values(1,1,500)
    insert t2 values(2,1,300)Select a.学号,a.年级,sum(a.书费) as 书费,sum(a.杂费) as 杂费,b.学费,sum(a.书费)+sum(a.杂费)+b.学费 as 总费用
    from t1 a
    left join t2 b on a.学号 = b.学号
    group by a.学号,a.年级,b.学费
    学号          年级          书费          杂费          学费          总费用         
    ----------- ----------- ----------- ----------- ----------- ----------- 
    1           1           300         100         500         900
    2           1           350         110         300         760(所影响的行数为 2 行)
      

  6.   

    Select a.学号,a.年级,isnull(sum(a.书费),0) 书费,isnull(sum(a.杂费),0) 杂费,b.学费,isnull(sum(a.书费),0)+isnull(sum(a.杂费),0)+isnull(b.学费,0) 总费用 from a left join b on a.学号 = b.学号 group by a.学号,a.年级,b.学费
      

  7.   

    select A.學號,A.年級, sum(A.書費) as 書費,sum(A.雜費) as 雜費,B.學費,書費+雜費 as 總費用
    from  A表 A,B表 B 
    where A.學號=B.學號  and A.年級=B.年級
     group by  A.學號,A.年級
      

  8.   

    Select a.*,b.学费,a.书费+a.杂费+b.学费 总费用 from (select 学号,年级,sum(书费) 书费,sum(杂费) 杂费,sum(书费) 书费 from a group by 学号,年级) a join b on a.学号=b.学号