2017-02-21 5 views
0

現在、重複を検出して正常に動作するクエリがあります。問題は、いくつかのレコードには2つの可能な値を持つDSというフィールドがあるということです。 VOTERまたはDMV。データベースのレコードに「優先度」を設定するにはどうすればよいですか?

重複が見つかった場合は、DMVレコードではなく、VOTERレコードを削除します。これは簡単にできますか?

WITH cte 
    AS (SELECT *, 
       Row_Number() OVER(partition BY fips_county_code, last, suffix, first, birthdate Order by (select null)) AS Rn 
     FROM WORK) 
UPDATE cte 
SET DUPES = 'D' 
WHERE RN > 1; 

答えて

0

。 DMVはVoterの前にあります。両方とも存在する場合、DVMはRN 1になり、有権者はRN 2になります。

WITH cte 
    AS (SELECT *, 
       Row_Number() OVER(partition BY fips_county_code, last, suffix, first, birthdate Order by DS) AS Rn 
     FROM WORK) 
UPDATE cte 
SET DUPES = 'D' 
WHERE RN > 1; 
+0

ありがとうございます! – rohanharrison

1

あなたはとても似'DMV'高い優先順位を与えることcase式を含めるためにあなたのrow_number()order byを変更することができます句でのご注文でDSを入れ

;with cte as (
    select * 
    , rn = row_number() over(
     partition by fips_county_code, last, suffix, first, birthdate 
     order by case when ds = 'dmv' then 0 else 1 end asc 
     ) 
    from work 
) 
update cte 
set dupes = 'D' 
where rn > 1; 
関連する問題