仅通过内在加入查询获得某些字段的重复行

发布于 2025-02-13 15:02:12 字数 2395 浏览 0 评论 0原文

如何仅在查询下方获得重复行?

 SELECT p.CustomerNumber
          ,pn.[Title]
          ,pn.[FirstName]
          ,pn.[LastName]
          ,a.[AgentID]
          ,a.[AgentName]
          ,a.[PersonID]
          ,pe.[EMailAddress]
          ,(SELECT TOP 1 pp.[PhoneCode] FROM [Rez].[PersonPhone] pp WHERE pp.PersonID = p.PersonID ORDER BY pp.ModifiedUTC DESC) AS Phone
      FROM [Rez].[Person] p
      INNER JOIN [Rez].[PersonName] pn ON p.PersonID = pn.PersonID
      INNER JOIN [Rez].[Agent] a ON a.PersonID = p.PersonID
      INNER JOIN [Rez].[PersonEMail] pe ON pe.PersonID = p.PersonID
      INNER JOIN [Rez].[AgentRole] ar ON ar.[AgentID] = a.[AgentID]
      WHERE a.CreatedUTC > '2018-01-01'
      ORDER BY pe.[EMailAddress], pn.[FirstName], pn.[LastName], p.[DOB]

在上面的查询中,我想通过pe获得重复记录。

当前数据:

First Name  Last Name   Agent Id    DOB          Email
server      test        2803815     11/28/2002  [email protected]
server      test        2803815     11/28/2002  [email protected]
Test        TC          2803882     11/28/2002  [email protected]
Test        AAA         2804713     11/28/2002  [email protected]
server      test        2803015     11/28/2002  [email protected]

在上面的数据中,我只想获得前2行&最后一行,因为这些数据是相同的数据,具有相同的名称,lastname,dob&电子邮件地址

所需的数据:

server      test        2803815     11/28/2002  [email protected]
server      test        2803815     11/28/2002  [email protected]
server      test        2803015     11/28/2002  [email protected]

How do I get duplicates rows only from below query?

 SELECT p.CustomerNumber
          ,pn.[Title]
          ,pn.[FirstName]
          ,pn.[LastName]
          ,a.[AgentID]
          ,a.[AgentName]
          ,a.[PersonID]
          ,pe.[EMailAddress]
          ,(SELECT TOP 1 pp.[PhoneCode] FROM [Rez].[PersonPhone] pp WHERE pp.PersonID = p.PersonID ORDER BY pp.ModifiedUTC DESC) AS Phone
      FROM [Rez].[Person] p
      INNER JOIN [Rez].[PersonName] pn ON p.PersonID = pn.PersonID
      INNER JOIN [Rez].[Agent] a ON a.PersonID = p.PersonID
      INNER JOIN [Rez].[PersonEMail] pe ON pe.PersonID = p.PersonID
      INNER JOIN [Rez].[AgentRole] ar ON ar.[AgentID] = a.[AgentID]
      WHERE a.CreatedUTC > '2018-01-01'
      ORDER BY pe.[EMailAddress], pn.[FirstName], pn.[LastName], p.[DOB]

In the above query I want to get the duplicate records by pe.[EMailAddress], pn.[FirstName], pn.[LastName], p.[DOB].

Current data:

First Name  Last Name   Agent Id    DOB          Email
server      test        2803815     11/28/2002  [email protected]
server      test        2803815     11/28/2002  [email protected]
Test        TC          2803882     11/28/2002  [email protected]
Test        AAA         2804713     11/28/2002  [email protected]
server      test        2803015     11/28/2002  [email protected]

In the above data I want to get only first 2 rows & last row becuase those are same data with same FirstName, LastName,DOB & Email address

Required Data:

server      test        2803815     11/28/2002  [email protected]
server      test        2803815     11/28/2002  [email protected]
server      test        2803015     11/28/2002  [email protected]

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

坠似风落 2025-02-20 15:02:12

您可以使用此方法来计数记录,并排除只有一个记录的记录

SELECT * FROM
(

SELECT T1.*, 
COUNT(*) OVER (PARTITION BY 
                T1.CustomerNumber,
                T1.Title,
                T1.FirstName,
                T1.[LastName],
                T1.[AgentID],
                T1.[AgentName],
                T1.[PersonID],
                T1.[EMailAddress]
) As DuplicateRowCount

FROM
     (
      SELECT p.CustomerNumber
          ,pn.[Title]
          ,pn.[FirstName]
          ,pn.[LastName]
          ,a.[AgentID]
          ,a.[AgentName]
          ,a.[PersonID]
          ,pe.[EMailAddress]
          ,(SELECT TOP 1 pp.[PhoneCode] FROM [Rez].[PersonPhone] pp 
           WHERE pp.PersonID = p.PersonID ORDER BY pp.ModifiedUTC DESC) AS Phone
           FROM [Rez].[Person] p
           INNER JOIN [Rez].[PersonName] pn ON p.PersonID = pn.PersonID
           INNER JOIN [Rez].[Agent] a ON a.PersonID = p.PersonID
           INNER JOIN [Rez].[PersonEMail] pe ON pe.PersonID = p.PersonID
           INNER JOIN [Rez].[AgentRole] ar ON ar.[AgentID] = a.[AgentID]
           WHERE a.CreatedUTC > '2018-01-01'
     ) T1
) T2
WHERE T2.DuplicateRowCount > 1
ORDER BY T2.[EMailAddress], T2.[FirstName], T2.[LastName], T2.[DOB]

You can use this method to count records in place and exclude those with only one record

SELECT * FROM
(

SELECT T1.*, 
COUNT(*) OVER (PARTITION BY 
                T1.CustomerNumber,
                T1.Title,
                T1.FirstName,
                T1.[LastName],
                T1.[AgentID],
                T1.[AgentName],
                T1.[PersonID],
                T1.[EMailAddress]
) As DuplicateRowCount

FROM
     (
      SELECT p.CustomerNumber
          ,pn.[Title]
          ,pn.[FirstName]
          ,pn.[LastName]
          ,a.[AgentID]
          ,a.[AgentName]
          ,a.[PersonID]
          ,pe.[EMailAddress]
          ,(SELECT TOP 1 pp.[PhoneCode] FROM [Rez].[PersonPhone] pp 
           WHERE pp.PersonID = p.PersonID ORDER BY pp.ModifiedUTC DESC) AS Phone
           FROM [Rez].[Person] p
           INNER JOIN [Rez].[PersonName] pn ON p.PersonID = pn.PersonID
           INNER JOIN [Rez].[Agent] a ON a.PersonID = p.PersonID
           INNER JOIN [Rez].[PersonEMail] pe ON pe.PersonID = p.PersonID
           INNER JOIN [Rez].[AgentRole] ar ON ar.[AgentID] = a.[AgentID]
           WHERE a.CreatedUTC > '2018-01-01'
     ) T1
) T2
WHERE T2.DuplicateRowCount > 1
ORDER BY T2.[EMailAddress], T2.[FirstName], T2.[LastName], T2.[DOB]
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文