如何从表中返回一个重复项

时间:2013-10-09 05:45:27

标签: sql sql-server

我有桌子,我有一个不同的库仑名称的重复记录 例如

id  classname
123 class1
123 unknown 

然后我也有一些只有唯一类名的标签 fr eg

id  classname
124  class2 
125  unknown 

所以现在我运行一个选择查询我得到结果

id  classname
123 class1
123 unknown
124 class2
125 unknown 

我希望以选择其中一个重复的方式返回值

id classnae
123 class1 
124 class2 
125 unknown

上面提到的是我必须得到的结果。 我正在使用左外连接来写这个。

select t.id,t.classname from Table1 t 
left outer join 
(select id,classname from Table1 GROUP BY id
  HAVING COUNT(id) > 1 ) 
s on s.Tagname = t.TagName 

但是我得到的是同样的记录,我过去曾经使用重复记录。

需要帮助来写这个

4 个答案:

答案 0 :(得分:0)

请尝试:

select 
 MAX(id) id, 
 classname 
from(
     select * from table1 union
     select * from table2
)x group by classname

答案 1 :(得分:0)

您可以使用:

select distinct id,
    (select top 1 classname from table1 t2 where t2.id = t.id order by case classname when 'unknown' then 0 else 1 end) classname
from Table1 t

我不确定您想要返回哪个重复项classname。您可以通过更改内部查询中的order by来控制ID。

如果你想彻底删除未知数

select distinct id,
    (select top 1 classname from table1 t2 where t2.id = t.id and t2.classname <> 'unknown') classname
from Table1 t
    where t.classname <> 'unknown'

答案 2 :(得分:0)

根据您对Szymon的回答的评论,请尝试以下查询:

    select distinct id,
(select top 1 classname from table1 t2 where t2.id = t.id and classname!='unknown' order by case classname when 'unknown' then 0 else 1 end) classname
from Table1 t 

根据您的要求::您不希望以“unknow”名称获得该课程。

答案 3 :(得分:0)

这对我有用

select * into #tbl from(
select 123 id ,'class1' classname
union select 123,'unknown'
union select 124,'class2'
union select 125,'unknown'
) A

select * from #tbl

select MAX(ID),classname 
from #tbl 
group by classname

drop table #tbl

这与您在问题中显示的结果相同。但我担心MAX(ID),因为它只给出了classname重复条目的bigt ID。因此,请根据您的需求进行选择。