日期:2014-05-17  浏览次数:21013 次

问一个SQL里UNION ALL相加的问题
我做了两个视图表,比如A B两个表,里面都有ks,xm,mc,sl,dj,sl*dj
我用UNION ALL
select ks,xm,mc,sum(s),dj,sum(a)
from
(select ks,xm,mc,sum(sl) s,dj,sum(je) a from A group ks,xm,mc,dj
union all
select ks,xm,mc,sum(sl) s,dj,sum(je) a from B group ks,xm,mc,dj) 
group by ks,xm,mc,dj
这样其中sum(s)和SUM(a)会得到下面两个SUM(SL)和sum(je)的相加的数额
但是我想在这个最后查询输出中,增加两个就是分别有A表和B表里sum(sl)一栏
最后输出列有 ks,xm,mc,sum(sl)A表,sum(sl)B表,SUM(SL)A表+B表,dj,sum(je) A表+B表
我怎么也用不起来,请问下这里告诉我应该如何做,谢谢

------解决方案--------------------
SQL code

--也没表,自已试下
select A.ks,A.xm,A.mc,
nvl(sum(A.s1),0) as1,
nvl(sum(B.s1),0) bs1,
nvl(sum(A.s1),0)+nvl(sum(B.s1),0) sl,
A.dj,
nvl(sum(A.je),0 aj1,
nvl(sum(B.je),0) bj1,
nvl(sum(A.je),0)+nvl(sum(B.je),0) dj,
from A full join B
on A.ks=B.ks and A.xm=B.xm and A.mc=B.mc and A.dj=B.dj
group by A.ks,A.xm,A.mc,A.dj

------解决方案--------------------
SQL code

nvl(sum(A.je),0)+nvl(sum(B.je),0) dj,--逗号去掉

------解决方案--------------------
a表group后ks,xm,mc是多条的
b表group后ks,xm,mc是多条的
group是分类总数,不是总总数,你想把A通过group变成求总数是不可能的,同理B也是不可能的,
如果真想在末尾再加个A的总数和B的总数,那么ks,xm,mc肯定是不确定的,建议就用“A”代替,同理B的就用“B”来代替那三个字段,然后在现有的查询最外面再union这两条记录