2
Column 0    Column 1        Column 2    Column 3    Column 4
csus        00287y109       38          NULL        169
mbus        01185pag4       NULL        NULL        1
mbus        01185pag4       100         NULL        18
mbus        018033DR8       100         NULL        5
psus        20002309        26          NULL        5
cbus        025816aq2       NULL        NULL        169
cdus        02586tbj2X      101         NULL        1
cdus        02586tbj2X      NULL        NULL        1

このテーブルからcombinedという名前の重複行を削除する必要があります。ただし、すべての行が複製されるわけではなく、複製された行がすべての列で同一であるわけでもありません。重複の例は、行2と行3です。削除の基準は、列0と列1(これらは実際の列ヘッダー)が同一である行が存在する場合、列2に値を持つ行を保持し、行を削除することです。列0と列1および列2に値を持つ重複行が存在する場合、列2にNULLがあります。これは私の基準に基づいて他の行と重複しないため、列2、行6に表示されるようにヌル値は問題ありません。最初の3列に焦点を当てています。列0と列1が重複している場合、Nullは問題ありません。列3は常にNULLであり、列4が重複しているかどうかは関係ありません。最後の2行、行7と8も複製されます。

期待される結果を追加しました

Column 0    Column 1        Column 2    Column 3    Column 4
csus        00287y109       38          NULL        169
mbus        01185pag4       100         NULL        18
mbus        018033DR8       100         NULL        5
psus        20002309        26          NULL        5
cbus        025816aq2       NULL        NULL        169
cdus        02586tbj2X      101         NULL        1

目的の結果では、行2と行8が削除されています。

4

1 に答える 1

4

これを試して:

with cte as 
(
 Select * ,
 row_number() over (partition by [Column 0],[Column 1] order by [Column 2] desc) rn
 from Sample
)
Select * from cte
where rn=1 

デモSQL フィドル

余談don't use spacesですcolumn namesが、本当にスペースを使用したい場合は、underscore

Updated

;with cte as 
 ( 
  Select * ,
  row_number() over (partition by [Column 0],[Column 1] order by [Column 2] desc) rn
  from Sample
 )
 Insert into final
 Select [Column 0], [Column 1], [Column 2], [Column 3] , [Column 4] 
 from cte 
 where rn=1
于 2013-03-20T05:00:46.800 に答える