代码之家  ›  专栏  ›  技术社区  ›  Kenny Mann

在某些列而不是其他列上区分或分组

  •  2
  • Kenny Mann  · 技术社区  · 14 年前

    我有一个视图,我试图用一些类似于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
    

    我需要提取所有这些列,但过滤姓氏、邮政编码和街道1。有趣的是:过滤器是任意的——这意味着我不在乎哪个副本消失了。这是一个邮件输出类型的事情和其他信息不用于任何其他原因,除了查找一个特定的人,如果需要的话(我不知道为什么)。所以…给定一个记录,就可以很容易地找出删除的记录。

    现在,我的sql fu失败了,我正在筛选c 极其缓慢 它基本上是一个foreach,从一个空列表开始,如果组合的姓氏、zip和street不在列表中,则添加行。

    我觉得我缺少了sql中应该理解的一个简单/基本部分。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Nitin Midha    14 年前

    解决方案可以假设我们在视图中有唯一的标识列:

    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