我在SQL Server 2012中有以下表格:
我需要选择不同的行,只有其接触等于“自己”。结果应该是这样的:
我尝试了以下查询:
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子句等不同方法来完成。
答案 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
希望它有所帮助。