现在有两表,格式(列)完全一样:create table testA(uName varchar,aNum int,bNum int,cNum int)
insert testA select 'A',10,10,10
union all select 'B',20,20,20
union all select 'C',30,30,30create table testB(uName varchar,aNum int,bNum int,cNum int)
insert testB select 'A',40,40,40
union all select 'C',50,50,50
union all select 'D',60,60,60表testA的数据:
uName aNum        bNum        cNum        
----- ----------- ----------- ----------- 
A     10          10          10
B     20          20          20
C     30          30          30表testB的数据:
uName aNum        bNum        cNum        
----- ----------- ----------- ----------- 
A     40          40          40
C     50          50          50
D     60          60          0现在需要对2表数据,根据uName列进行整合为一张表。要求是:求A表和B表的并集(对A表和B表都存在的数据,进行相加)。期望结果如下:
uName aNum        bNum        cNum        
----- ----------- ----------- ----------- 
A     50          50          50
B     20          20          20
C     80          80          80
D     60          60          0谢谢大家,在线等待。

解决方案 »

  1.   

    select uName,aNum=sum(aNum),bNum=sum(bNum),cNum =sum(cNum)
    from 
    (select * from testA
    union all 
    select * from testB
    )A
    group by uName
      

  2.   

    select uName,sum(aNum) as aNum,sum(bNum) as bNum,sum(cNum) as cNum        
    from (
    select * from testA
    union all
    select * from testA
    ) as t
    group by uName
      

  3.   

    create table testA(uName varchar,aNum int,bNum int,cNum int)
    insert testA select 'A',10,10,10
    union all select 'B',20,20,20
    union all select 'C',30,30,30create table testB(uName varchar,aNum int,bNum int,cNum int)
    insert testB select 'A',40,40,40
    union all select 'C',50,50,50
    union all select 'D',60,60,60select uName,aNum=sum(aNum),bNum=sum(bNum),cNum =sum(cNum) 
    from 
    (select * from testA 
    union all 
    select * from testB 
    )A 
    group by uName--drop table testA,testB
    --结果
    uName,aNum,bNum,cNum
    ------------------------
    A 50 50 50
    B 20 20 20
    C 80 80 80
    D 60 60 60
      

  4.   


    SELECT UserName,SUM(aNum),SUM(bNum),
    SUM(cNum) FROM 
    (SELECT * FROM testA 
    UNION ALL
    SELECT * FROM testB) a GROUP BY UserName
      

  5.   

    或者用full join select isnull(a.uName,b.uName) as uName,
     isnull(a.aNum,0)+isnull(b.aNum,0) as aNum,
     isnull(a.bNum,0)+isnull(b.bNum,0) as bNum,
     isnull(a.cNum,0)+isnull(b.cNum,0) as cNum        
    from testA a full join testB b
    on a.uName=b.uName
      

  6.   


    select uName,sum(aNum) as aNum,sum(bNum) as bNum,sum(cNum) as cNum from (
    select * from testA 
    Union 
    select * from testB) b group by uName
      

  7.   

    要是以A表为基础,2张表求差呢,谢谢。
    uName aNum        bNum        cNum        
    ----- ----------- ----------- ----------- 
    A    -30         -30        -30 
    B    20          20          20 
    C    -20         -20        -20 
    D    -60         -60        0