日期:2014-05-19  浏览次数:20487 次

新手救教:怎样分别统计不含重复的计录数和重复的计录数?
表a
姓名           日期
刘立           2007-01-01
王刚           2007-01-01
李山           2007-01-01
吴南           2007-01-01
刘立           2007-01-01
李海           2007-01-05
刘立           2007-01-01
李山           2007-01-01
得出:

不含重复的计录数:5条
重复的计录数:2条


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

declare @a table (a char,b int)
insert into @a select 'a ',1
union all select 'b ',1
union all select 'c ',1
union all select 'd ',1
union all select 'a ',1
union all select 'e ',2
union all select 'a ',1
union all select 'c ',1


select * from @a

declare @b int
declare @c int
select @b =count(*) from (select distinct a,b from @a c where(select count(*) from @a where a=c.a and b=c.b)> 1) as d
select @c =count(*) from @a where a not in (select distinct a from @a c where(select count(*) from @a where a=c.a and b=c.b)> 1)
or b not in(select distinct b from @a c where(select count(*) from @a where a=c.a and b=c.b)> 1)

print '不含重复的计录数: '+cast(@c as varchar(20))
print '重复的计录数: '+cast(@b as varchar(20))
------解决方案--------------------
来个别的:

create table #temp
(A varchar(50),
B varchar(50)
)
insert into #temp
select '刘立 ', '2007-01-01 ' union all select '王刚 ', '2007-01-01 ' union all select '李山 ', '2007-01-01 ' union all select '吴南 ', '2007-01-01 ' union all select '刘立 ', '2007-01-01 ' union all select '李海 ', '2007-01-05 ' union all select '刘立 ', '2007-01-01 ' union all select '李山 ', '2007-01-01 '
select * from #temp


重复的记录数:
select count(*) from (select A,max(B) B from #temp group by A having count(B)> 1) a
------
2


不含重复的记录数:
select count(*) from (select A,max(B) B from #temp group by A having count(B)=1) b
------------------
3


选出不重复的所有记录数:
select distinct * from #temp
------------
5