SQL Server:根据两列消除重复项

时间:2017-02-10 17:05:24

标签: sql-server-2012

我在SQL Server 2012中有以下表格:

enter image description here

我需要选择不同的行,只有其接触等于“自己”。结果应该是这样的:

enter image description here

我尝试了以下查询:

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

我不确定是否可以使用临时表或where子句等不同方法来完成。

2 个答案:

答案 0 :(得分:1)

我认为您需要按SiteNum进行分区,然后按Contact进行排序,这与您正在进行的操作相反。但除此之外,你的方法似乎走上正轨。试试这个问题:

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

请注意,我对CASE子句使用ORDER BY表达式,该子句明确检查名为“拥有”的联系人。我们本来可以尝试使用MIN()MAX()并依赖于具有NULL的不匹配记录,但如果您的表格除了' Own&之外还有其他联系人值,这可能会导致以后出现问题#39;

答案 1 :(得分:0)

这个where子句应该能给你你想要的东西

Select DISTINCT SiteAdd from table where Contact = 'Own'

如果有重复的行,您也可以将distinct放在整行上。

Select DISTINCT * from table where Contact = 'Own'

您的原始查询将根据逻辑运行。只需更改TYPO:

  

wehre rn = 1到其中rn = 1

希望它有所帮助。