【问题标题】:Select duplicate rows with a distinct column选择具有不同列的重复行
【发布时间】:2015-11-17 17:04:08
【问题描述】:

我需要帮助编写一个查询,该查询将返回包含重复值 (AccountID) 的行,但仅当该行包含唯一或不同的列值 (AgentID) 时,例如:

代理表:

AgentID - AccountID
2         ABCD
1         AI00
3         ABCD
4         BI00
5         ABCD
5         ABCD  

结果:

Account   Count(*)
ABCD      2      

(最后两行被忽略,因为 AgentID 不是唯一的)。

谢谢。

【问题讨论】:

  • 你使用的是什么 rdbms?
  • 为什么要忽略最后两行?你应该忽略最后一行,只留下倒数第二行。否则你会丢失 id 5 的数据。但你还想忽略最后两行吗?

标签: sql duplicates unique


【解决方案1】:

我猜你正在寻找这个查询:

SELECT AgentID, AccountID
FROM dbo.Agents a
WHERE EXISTS
(
    SELECT 1 FROM dbo.Agents a2
    WHERE a.AccountID = a2.AccountID
    AND   a.AgentID <> a2.AgentID
)
GROUP BY AgentID, AccountID
HAVING COUNT(*) = 1

Demo

它返回包含重复AccountIDAgentIDAccountID 的组合是唯一的所有行。在您的示例中是:

AgentID      AccountID
2            ABCD
3            ABCD

因此,即使它具有相同的重复 AccountID,它也会省略最后两行,因为它们具有相同的 AgentID

【讨论】:

  • 谢谢,我试试这个。
【解决方案2】:

我认为这是两个聚合。第一个是在AgentId/AccountId 级别获取唯一对。第二个是在AccountId 级别获取给定帐户的号码:

select AccountId, count(*)
from (select AgentId, AccountId
      from agents
      group by AgentId, AccountId
      having count(*) = 1
     ) aa
group by AccountId
having count(*) > 1;

【讨论】:

  • 谢谢。如何将此查询的结果集加入到第二个表(代理详细信息)中,该表的键列为 AgentId,以便查看第二个表中的其他列?
  • @Sanxion 。 . .你应该问一个不同的问题。这似乎与这个问题大不相同。
猜你喜欢
  • 2021-07-14
  • 2022-07-18
  • 1970-01-01
  • 2013-02-05
  • 1970-01-01
  • 2014-12-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多