【问题标题】:Distinct or group by on some columns but not others在某些列上区分或分组,但在其他列上不区分
【发布时间】:2010-04-01 14:13:10
【问题描述】:

我认为我正在尝试在某些列上使用类似于 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 的一个简单/基本部分。

【问题讨论】:

  • 您是否查看了记录的主键或唯一标识?

标签: sql-server-2005 tsql


【解决方案1】:

解决方案可以假设我们有唯一标识列:

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]

当视图中没有标识符时......

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

【讨论】:

  • 困难在于——我们没有唯一的标识符。 :(
猜你喜欢
  • 2013-09-29
  • 2021-07-31
  • 2018-12-06
  • 2018-10-07
  • 2013-10-02
  • 1970-01-01
  • 2020-07-04
  • 2019-07-12
  • 1970-01-01
相关资源
最近更新 更多