非空、重复数据的统计查询 SQL2005

多难成佛 2012-11-24 02:42:18
查询字段值的重复号码
表A,字段如下(数据ID是自增主键):
数据ID 学生ID 电话号码 班级 班主任
1 035 8785465
2 035 8865453
3 186 8888888
4 186
5 033 7654832
6 042 8888888
7 033 8324231
8 012 8357623
9 039 9999999
10 177
11 027 9999999
12 027
---------------------------------------
在非空的电话号码中查询重复的电话号码(按号码计数而非按记录计数),得到下面这样的结果:
数据ID 学生ID 电话号码
3 186 8888888
6 042 8888888
9 039 9999999
11 027 9999999
...全文
158 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangshun 2012-11-24
  • 打赏
  • 举报
回复
--> 测试数据:[TB]
if object_id('[TB]') is not null drop table [TB]
GO
create table [TB]([数据ID] int,[学生ID] varchar(3),[电话号码] int,[班级] sql_variant,[班主任] sql_variant)
insert [TB]
select 1,'035',8785465,null,null union all
select 2,'035',8865453,null,null union all
select 3,'186',8888888,null,null union all
select 4,'186',null,null,null union all
select 5,'033',7654832,null,null union all
select 6,'042',8888888,null,null union all
select 7,'033',8324231,null,null union all
select 8,'012',8357623,null,null union all
select 9,'039',9999999,null,null union all
select 10,'177',null,null,null union all
select 11,'027',9999999,null,null union all
select 12,'027',null,null,null

select 
     [数据ID],
     [学生ID],
     [电话号码]
from [TB] t 
WHERE  EXISTS(
     SELECT 1 FROM Tb where t.[电话号码]>[电话号码] and t.[数据ID]>[数据ID] and t.[学生ID]>[学生ID]
     )

/*
数据ID        学生ID 电话号码
----------- ---- -----------
3           186  8888888
6           042  8888888
9           039  9999999
11          027  9999999

(4 行受影响)

*/

drop table [TB]
  • 打赏
  • 举报
回复

with tb(数据ID,学生ID,电话号码)
as(
select 1,'035','8785465' union all
select 2,'035','8865453'  union all      
select 3,'186','8888888'union all
select 4,'186',null   union all
select 5,'033','7654832'union all
select 6,'042','8888888'union all
select 7,'033','8324231'union all
select 8,'012','8357623'union all
select 9,'039','9999999'union all
select 10,'177',null   union all
select 11,'027','9999999'union all
select 12,'027',null
)select * from tb tb1 where (select count(1) from tb tb2 where isnull(tb1.电话号码,'')=tb2.电话号码)>1
百年树人 2012-11-24
  • 打赏
  • 举报
回复
if object_id('[A]') is not null drop table [A]
go
create table [A]([数据ID] int,[学生ID] varchar(3),[电话号码] int,[班级] sql_variant,[班主任] sql_variant)
insert [A]
select 1,'035',8785465,null,null union all
select 2,'035',8865453,null,null union all
select 3,'186',8888888,null,null union all
select 4,'186',null,null,null union all
select 5,'033',7654832,null,null union all
select 6,'042',8888888,null,null union all
select 7,'033',8324231,null,null union all
select 8,'012',8357623,null,null union all
select 9,'039',9999999,null,null union all
select 10,'177',null,null,null union all
select 11,'027',9999999,null,null union all
select 12,'027',null,null,null
go

select A.数据ID,A.学生ID,A.电话号码 
from A
JOIN (SELECT 电话号码 FROM A GROUP BY 电话号码 HAVING COUNT(1)>1) B
ON A.电话号码=B.电话号码

/*
数据ID        学生ID 电话号码
----------- ---- -----------
3           186  8888888
6           042  8888888
9           039  9999999
11          027  9999999

(4 行受影响)
*/

22,210

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧