0

我有一个表,其中我有一个重复的记录,其中包含不同的名称,例如

id  classname
123 class1
123 unknown 

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

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

4 回答 4

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 

根据您的要求::您不想获得具有“未知”名称的课程。

于 2013-10-09T06:46:16.217 回答
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) 因为它只给出类名重复条目的最大 ID。所以根据自己的需要进行选择。

于 2013-10-09T07:07:00.147 回答
0

请试试:

select 
 MAX(id) id, 
 classname 
from(
     select * from table1 union
     select * from table2
)x group by classname
于 2013-10-09T05:46:37.823 回答
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'
于 2013-10-09T05:57:27.930 回答