我认为我正在尝试在某些列上使用类似于 DISTINCT 的内容进行过滤,但在其他列上则不然。
我有这样的观点:
Name
LastName
Zip
Street1
HouseholdID (may not be unique because it may have multiple addresses -- think of it in the logical sense as grouping persons but not physical locations; If you lookup HouseholdID 4130, you may get two rows.. or more, because the person may have mutiple mailing locations)
City
State
我需要提取所有这些列,但要筛选 LastName、Zip 和 Street1。这是有趣的部分:过滤器是任意的——这意味着我不关心哪一个重复项消失了。这是用于邮寄类型的事情,其他信息除了在需要时查找特定的人之外不会用于任何其他原因(我不知道为什么)。因此..给定其中一条记录,您可以轻松找出已删除的记录。
就目前情况而言,我的 Sql-Fu 失败了,我正在 C# 中进行过滤,这非常慢,并且几乎是一个以空列表开头并在 if 中添加行的 foreach姓氏、邮政编码和街道的组合不在列表中。
我觉得我错过了我应该理解的 SQL 的简单/基本部分。
最佳答案
解决方案可以假设我们有唯一标识列:
Select Name,
LastName,
Zip,
Street1,
HouseholdID,
City,
State
From View V1
INNER JOIN
(
Select Min([Unique Identification]) as ID
From View v
Group By LastName,
Zip,
Street ) AS T on T.ID = V1.[Unique Identification]
当 View 中没有标识符时......
Select Name,
LastName,
Zip,
Street1,
HouseholdID,
City,
State
From
(
Select Name,
LastName,
Zip,
Street1,
HouseholdID,
City,
State,
Row_Number() Over (Partition By LastName,Zip,Street Order By Street1,HouseholdID,City,State) AS RowNum
From View v
) AS T
Where T.RowNum = 1
关于sql-server-2005 - 对某些列进行区分或分组,但对其他列则不然,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2560964/