|
|
发表于 2008/12/8 15:15:03
|
显示全部楼层
select a.a1,a.a2,a.b1,a.b2
from (
select distinct a.rowid,'a' s,a.a1,a.a2,b.b1,b.b2,c.n
from a,b,
(
select a1,a2,count(*) n
from a
group by a1,a2
) c
where a.a1=b.b1
and a.a2=b.b2
and a.a1=c.a1
and a.a2=c.a2
union all
select distinct b.rowid ,'b' s,a1,a2,b.b1,b.b2,c.n
from a,b,
(
select b1,b2,count(*) n
from b
group by b1,b2
) c
where a.a1=b.b1
and a.a2=b.b2
and c.b1=b.b1
and c.b2=b.b2
) a,
(
select sum (a1) a1,sum(a2) a2
,least(sum(an),sum(bn)) n,decode(sign(sum(an)-sum(bn)),
-1,'a',0,'a',1,'b','') sig
from
(
SELECT a.a1||a.a2 a,A.A1,A.A2,COUNT(*) aN,0 b1,0 b2,0 bn
FROM A
GROUP BY A.A1,A.A2
UNION
SELECT b.b1||b.b2 a,0,0,0,B.B1,B.B2,COUNT(*) N
FROM B
GROUP BY B.B1,B.B2
)
group by a
having least(sum(an),sum(bn))<>0
) h
where a.s=h.sig
and a.n=h.n
and h.a1=a.a1
and h.a2=a.a2
order by a.a1 |
|