0

たとえば、列名が異なる重複レコードがあるテーブルがあります

id  classname
123 class1
123 unknown 

次に、一意のクラス名 fr のみを持つタグもいくつかあります。

id  classname
124  class2 
125  unknown 

だから今、選択クエリを実行して結果を得る

id  classname
123 class1
123 unknown
124 class2
125 unknown 

重複の1つが選択されるような方法で値を返したい

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

してみてください:

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 * 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 の重複エントリの最大の ID しか与えないので心配です。したがって、ニーズに応じて選択してください。

于 2013-10-09T07:07:00.147 に答える
0

Szymon's answer に関するコメントに従って、以下のクエリを試してください。

    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 に答える