select * 
from (
SELECT TA001,TA002,SUM(TA003) AS TA003 
FROM TA 
WHERE TA002='200902' 
GROUP BY TA001,TA002 
except
SELECT TB001,TB002,SUM(TB004) AS TB004 
FROM TB 
WHERE TB002='200902' 
GROUP BY TB001,TB002 ) a
union
select * from
(SELECT TB001,TB002,SUM(TB004) AS TB004 
FROM TB 
WHERE TB002='200902' 
GROUP BY TB001,TB002
except
SELECT TA001,TA002,SUM(TA003) AS TA003 
FROM TA 
WHERE TA002='200902' 
GROUP BY TA001,TA002 ) b

解决方案 »

  1.   


    用CheckSum()最简单:select * from 
    (
    SELECT TA001,TA002,SUM(TA003) AS TA003 
    FROM TA 
    WHERE TA002='200902' 
    GROUP BY TA001,TA002 
    ) a where checksum(*) not in (select checksum(*) from 
    (
    SELECT TB001 ta001,TB002 ta002,SUM(TB004) AS Ta003 
    FROM TB 
    WHERE TB002='200902' 
    GROUP BY TB001,TB002 
    )
    B)select m.* from 
    (
    SELECT TA001,TA002,SUM(TA003) AS TA003 
    FROM TA 
    WHERE TA002='200902' 
    GROUP BY TA001,TA002 
    ) m where not exists(select 1 from
    (
    SELECT TB001,TB002,SUM(TB004) AS TB004 
    FROM TB 
    WHERE TB002='200902' 
    GROUP BY TB001,TB002 
    ) n
    where n.tb001 = m.ta001 and n.tb002 = m.ta002 and n.tb004 = m.ta003
    )
    union all
    select m.* from
    (
    SELECT TB001,TB002,SUM(TB004) AS TB004 
    FROM TB 
    WHERE TB002='200902' 
    GROUP BY TB001,TB002 
    ) m where not exists (select 1 from
    (
    SELECT TA001,TA002,SUM(TA003) AS TA003 
    FROM TA 
    WHERE TA002='200902' 
    GROUP BY TA001,TA002 
    ) n where n.ta001 = m.tb001 and n.ta002 = m.tb002 and n.ta003 = m.tb004
    )
      

  2.   


    select TA001,TA002,TA003 ,TB001,TB002, TB004
    from
    (SELECT TA001,TA002,SUM(TA003) AS TA003 
    FROM TA 
    WHERE TA002='200902' 
    GROUP BY TA001,TA002 ) as T1
    full join 
    (SELECT TB001,TB002,SUM(TB004) AS TB004 
    FROM TB 
    WHERE TB002='200902' 
    GROUP BY TB001,TB002 ) as T2
    on T1.TA001=T2.TB001 and T1.TA002=T2.TB002 and T1.TA003 =T2.TB004 
    where TA001 is null or TB001 is null
      

  3.   

    我说明一下TA001,TA002,TB001,TB003全是char类型,不知行得通不?
      

  4.   

    那就用union all或full join了.
      

  5.   


    试过你的方法,觉得能基本达到要求,就是觉得能不能将TA001=TB001与TA002=TB002相同的值放到同一行,而不是显示NULL!