有一个明细表与汇总表:
明细表MX
ID IDTYPE
---------------
1 A
2 B
3 A
4 C汇总表HZ
IDTYPE CNT
---------------
A 3
B 1
C 0
D 1怎么样取出HZ表与MX表中IDTYPE相同但明细表中ID汇总数与HZ表CNT不同的记录???
我知道可以写这样的语句查所有的:
select hz.idtype,hz.cnt,(select count(id) from mx where mx.idtype=hz.idtype) cnt2 from hz但要精确查出想要的结果, 请问应怎么写语句???
正确的结果为:
IDTYPE CNT CNT2
A 3 2
C 0 1
D 1 0
明细表MX
ID IDTYPE
---------------
1 A
2 B
3 A
4 C汇总表HZ
IDTYPE CNT
---------------
A 3
B 1
C 0
D 1怎么样取出HZ表与MX表中IDTYPE相同但明细表中ID汇总数与HZ表CNT不同的记录???
我知道可以写这样的语句查所有的:
select hz.idtype,hz.cnt,(select count(id) from mx where mx.idtype=hz.idtype) cnt2 from hz但要精确查出想要的结果, 请问应怎么写语句???
正确的结果为:
IDTYPE CNT CNT2
A 3 2
C 0 1
D 1 0
h.IDTYPE,h.CNT,m.CNT2
from
HZ h
full outer join
(select IDTYPE,count(*) as CNT2 from MX group by IDTYPE)
on
h.IDTYPE=m.IDTYPE and isnull(h.CNT,0)<>isnull(m.CNT2,0)
from HZ A
left join
(select IDTYPE ,count(*) as CNT2
from MX
group by IDTYPE) B
on A.IDTYPE=B.IDTYPE and A.CNT<>isnull(B.CNT2,0)
insert into @mx values(1,'A')
insert into @mx values(2,'B')
insert into @mx values(3,'A')
insert into @mx values(4,'C') declare @hz table(IDTYPE varchar(4),CNT int)
insert into @hz values('A',3)
insert into @hz values('B',1)
insert into @hz values('C',0)
insert into @hz values('D',1) select
h.IDTYPE,isnull(h.CNT,0) CNT,isnull(m.CNT2,0) CNT2
from
@HZ h
full outer join
(select IDTYPE,count(*) as CNT2 from @MX group by IDTYPE) m
on
h.IDTYPE=m.IDTYPE
where
isnull(h.CNT,0)<>isnull(m.CNT2,0)/*
IDTYPE CNT CNT2
------ ----------- -----------
A 3 2
C 0 1
D 1 0
*/
from HZ A
left join
(select IDTYPE ,count(*) as CNT2
from MX
group by IDTYPE) B
on A.IDTYPE=B.IDTYPE and A.CNT < >isnull(B.CNT2,0)