2017-02-10 7 views
1

I持つSQL Serverの2012年に、次の表に基づいて重複を排除します。結果はこのようにすべきである:私はそれは一時テーブルまたは句のように異なるアプローチを用いて達成することができるかどうかわからないのですSQL Serverは:私はその接点に等しい「自分」だけの個別の行とを選択する必要が</p> <p><a href="https://i.stack.imgur.com/ZInN5.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/ZInN5.png" alt="enter image description here"></a></p> <p>:2列

with cte as 
(
    select 
     row_number() over (partition by contact order by SiteNum) rn, 
     SiteNum, SiteAdd, Description, Contact 
    from 
     Name 
) 
select * 
from cte 
where rn = 1 

enter image description here

を私は次のクエリを試してみました。あなたはまた、行全体に明確なを置くことができる

Select DISTINCT SiteAdd from table where Contact = 'Own' 

を期待している何句はあなたを与える必要があり

答えて

1

SiteNumでパーティションを作成し、Contactで注文する必要があると思います。これは、あなたがやっていたことの反対です。しかし、これ以外に、あなたのアプローチは正しい方向にあるようです。私は明示的に「自分」と呼ばれる連絡先をチェックORDER BY句のCASE表現を使用

with cte as 
(
    select row_number() over (partition by SiteNum 
     order by case when Contact = 'Own' then 0 else 1 end) rn, 
     SiteNum, SiteAdd, Description, Contact 
    from Name 
) 
select * from cte 
where rn = 1 

注:この文字列で検索してください。 MIN()またはMAX()を使用しようとしていて、NULLの一致しないレコードに頼っている可能性がありますが、テーブルに「Own」以外の連絡先があると後で問題が発生する可能性があります。

0

これは、ケースで重複行があります。

Select DISTINCT * from table where Contact = 'Own' 

元のクエリはロジックに基づいて動作します。ただ、TYPO変更:どこRN = 1

wehreのRN = 1を、それがお役に立てば幸いです。

+0

contact = 'Own'の場所を含めると、行番号2(SiteNum 2)は返されません。 – user2536008

関連する問題

 関連する問題