SQL 重复数据查询

yajun_snow 2009-10-21 08:15:06
item oem oem_no
0001 a b
0001 c m
0001 a c
0002 q v
0002 q v
0003 r a


想得到,相同的item只取一条数据(可以任意一条)

得到
0001 a b
0002 q v
0003 r a
...全文
113 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhjzgsy 2009-10-22
  • 打赏
  • 举报
回复

DECLARE @t TABLE (id INT,tac VARCHAR(2),tbc VARCHAR(2))
INSERT INTO @t
SELECT 001,'a','b' UNION ALL
SELECT 001,'c','m' UNION ALL
SELECT 001,'a','c' UNION ALL
SELECT 002,'q','v' UNION ALL
SELECT 002,'q','v' union all
SELECT 003,'r','a'

select id,tac,tbc
from
(select *,row=row_number()over(partition by id order by id) from @t)t
where row=3

wldzjj 2009-10-22
  • 打赏
  • 举报
回复
SELECT * FROM `tb` group by item
gengyin622 2009-10-21
  • 打赏
  • 举报
回复
可以用group by 实现, 计数count>1就行了

这样你还可以知道有几个重复值
--小F-- 2009-10-21
  • 打赏
  • 举报
回复
select 
distinct *
from
tb t
where
not exists (select 1 from tb where item = t.item and oem_no < t.oem_no)
dawugui 2009-10-21
  • 打赏
  • 举报
回复
--如果是2005用row_number() over()

--以下是2000的写法
create table tb(item varchar(10), oem varchar(10), oem_no varchar(10))
insert into tb values('0001' , 'a' , 'b')
insert into tb values('0001' , 'c' , 'm')
insert into tb values('0001' , 'a' , 'c')
insert into tb values('0002' , 'q' , 'v')
insert into tb values('0002' , 'q' , 'v')
insert into tb values('0003' , 'r' , 'a')
go


select distinct t.* from tb t where oem_no = (select min(oem_no) from tb where item = t.item)

select distinct t.* from tb t where not exists (select 1 from tb where item = t.item and oem_no < t.oem_no)

select distinct item,oem,oem_no from
(
select t.* , px = (select count(1) from tb where item = t.item and (oem_no < t.oem_no or (oem_no = t.oem_no and oem < t.oem) )) + 1 from tb t
) m where px = 1

drop table tb

/*
item oem oem_no
---------- ---------- ----------
0001 a b
0002 q v
0003 r a

(所影响的行数为 3 行)
*/
feixianxxx 2009-10-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 roy_88 的回复:]
SQL2000參照
http://topic.csdn.net/u/20080626/00/43d0d10c-28f1-418d-a05b-663880da278a.html?32698
[/Quote]
很久不见ROY哥
SQL77 2009-10-21
  • 打赏
  • 举报
回复
SELECT DISTINCT * FROM TB T WHERE OEM=(SELECT MAX(OEM) FROM TB WHERE ITEM=T.ITEM)
SQL77 2009-10-21
  • 打赏
  • 举报
回复
SELECT DISTINCT * FROM TB T WHERE OEM=(SELECT MIN(OEM) FROM TB WHERE ITEM=T.ITEM)
中国风 2009-10-21
  • 打赏
  • 举报
回复
select *
from
(select *,row=row_number()over(partition by item order by oem) from t1)t
where row=1

34,873

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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