日期:2014-05-18  浏览次数:20596 次

一个简单的查询问题
create   table   o   (
bh   varchar(10),
mc   varchar(10),
je   int)

create   table   t   (
bh   varchar(10),
mc   varchar(10),
je   int)
insert   o
select   '01 ',   'A ',   20
union   all
select   '02 ',   'B ',   30
union   all
select   '04 ',   'D ',   60

insert   t
select   '02 ',   'B ',   50
union   all
select   '03 ',   'C ',   10
union   all
select   '04 ',   'D ',   100


select   allbh,allmc,ls,jin,chajia   from   (
select   isnull(o.bh,t.bh)   as   allbh,
isnull(o.mc,t.mc)   allmc,
isnull(o.je,0)   as   ls,
isnull(t.je,0)   as   jin,
(isnull(t.je,0)-isnull(o.je,0))   as   chajia
from   o   full   join   t   on   o.bh=t.bh
)   as   b   order   by   b.allbh

select   allbh= '合计 ',allmc= ' ',ls=sum(ls),jin=sum(jin),chajia=sum(chajia)   from  
(select   isnull(o.bh,t.bh)   as   allbh,
isnull(o.mc,t.mc)   allmc,
isnull(o.je,0)   ls,
isnull(t.je,0)   jin,
(isnull(t.je,0)-isnull(o.je,0))   as   chajia
from   o   full   join   t   on   o.bh=t.bh)   as   c
以上两个查询语句会形成两个结果
如何把两个查询结果组合在一起


------解决方案--------------------

select allbh,allmc,ls,jin,chajia from (
select isnull(o.bh,t.bh) as allbh,
isnull(o.mc,t.mc) allmc,
isnull(o.je,0) as ls,
isnull(t.je,0) as jin,
(isnull(t.je,0)-isnull(o.je,0)) as chajia
from o full join t on o.bh=t.bh
) as b
union all
select allbh= '合计 ',allmc= ' ',ls=sum(ls),jin=sum(jin),chajia=sum(chajia) from
(select isnull(o.bh,t.bh) as allbh,
isnull(o.mc,t.mc) allmc,
isnull(o.je,0) ls,
isnull(t.je,0) jin,
(isnull(t.je,0)-isnull(o.je,0)) as chajia
from o full join t on o.bh=t.bh) as c
order by b.allbh



------解决方案--------------------
用union all