0

在我创建了这个查询的视图中,

SELECT DISTINCT 
ClientCode, ClientName, Address1, Address2, City, Country, CreatedBy, CreatedDate
FROM 
Contact
GROUP BY 
ClientCode, ClientName, Address1, Address2, City, Country, CreatedBy, CreatedDate

这会给我这个结果,

001   ABC   Lot No,   Road,   City B,   US    Alice    03/04/2012
001   ABC   Lot No,   Road,   City B,   US    Benny    04/04/2012

我应该如何设计我的查询,以便我可以过滤掉重复的数据?我想通过仅显示 1 行数据来忽略这两个字段 - CreatedBy 和 CreatedDate。这就是我想要得到的结果。

001   ABC   Lot No,   Road,   City B,   US    Alice    03/04/2012    !OR!
001   ABC   Lot No,   Road,   City B,   US    Benny    04/04/2012 

我希望查询能够通过仅比较 ClientCode、ClientName、Address1、Address2、City 和 Country 来过滤掉重复数据。保留 CreatedBy 和 CreatedDate 的原因是我必须将它包含在另一个界面中。

4

2 回答 2

0

尝试添加

GROUP BY field

其中字段应该是任何与客户端名称相同的字段

在您的特殊情况下,您可以向 GROUP BY 添加多个字段,例如

GROUP BY clientname, clientfoo ..

于 2013-04-08T07:41:08.567 回答
0

您可以使用排名功能根据最近的日期获取每个地址的最新联系方式:

with recentContact as
(
  select *
    , mostRecentRank = row_number() over
    (
      partition by ClientCode
        ,ClientName 
        ,Address1 
        ,Address2 
        ,City 
        ,Country
      order by CreatedDate desc
    )
  from contacts
)
select ClientCode
        ,ClientName 
        ,Address1 
        ,Address2 
        ,City 
        ,Country
        ,CreatedBy
        ,CreatedDate
from recentContact
where mostRecentRank = 1

SQL Fiddle 与演示

于 2013-04-08T08:18:10.943 回答