需要 SQL 在不同的列中查找具有重复值的记录

Posted

技术标签:

【中文标题】需要 SQL 在不同的列中查找具有重复值的记录【英文标题】:Need SQL to find records with repeating values across separate columns 【发布时间】:2018-11-05 15:13:42 【问题描述】:

我有一个相当简单的表格,看起来像这样:

CID     ID2     ID3     ID4
001     002     002     002
002     003     003     003
003     003     010     010
004     099     080     080
005     100     080     081
006     101     043     009
007     017     013     009
008     092     012     009

我正在尝试编写一个 SQL 查询(目前在 MS Access 中,但我应该能够采用任何方法),它将识别 CID 中的所有值,其中 ID2、ID3 或 ID4 中的任何值在它们自己的列中重复以及相关的重复值计数。我可以用一列相当容易地做到这一点,但我太菜鸟了,无法弄清楚如何获得它们在不同列中重复的位置。

我对上表的预期结果是:

CID     Count
002     2
003     2
004     2
005     2
006     3
007     3
008     3

CID 002 和 003 共享同一个 ID2,CID 004 和 005 共享同一个 ID3,CID 006、007 和 008 都共享同一个 ID4。

到目前为止,我已经这样做了,它可以仅从 ID2 获取计数:

SELECT tbl.CID, Count(*) AS COUNTIDs FROM tbl GROUP BY tbl.ID2 HAVING Count(*)>1;

感谢您的关注和帮助!

【问题讨论】:

好的,我已编辑帖子以包含此内容。我没有打扰,因为它不符合我的要求。 【参考方案1】:

我的答案基于 SQL Server。 你应该 UNPIVOT 你的桌子。这样,您将所有列都作为行。 然后,您的最后一个查询将得到您想要的结果。

问题是 Access 没有包含此功能。然后你需要这样做:

SELECT my_col
INTO tbl
FROM (
    SELECT CID as my_col
    FROM TABLE
         UNION
    SELECT ID2 as my_col     
    FROM TABLE
         UNION
    SELECT ID3 as my_col
    FROM TABLE
         UNION
    SELECT ID4 as my_col
    FROM TABLE
) as auxiliar

您的查询将显示结果:

SELECT tbl.my_col, Count(*) AS COUNTIDs 
FROM tbl 
GROUP BY tbl.my_col 
HAVING Count(*)>1;

【讨论】:

以上是关于需要 SQL 在不同的列中查找具有重复值的记录的主要内容,如果未能解决你的问题,请参考以下文章

SQL查询以选择在同一列中具有不同值的子记录的父级

SQL选择一列中具有重复值的所有行

sql查询以选择两列中具有相同id但不同值的记录

SQL如何查询出某一列中不同值出现的次数?

在列中查找具有重复值的行

熊猫数据框:在固定其他列的列中提取具有特定标准/条件最小值的数据[重复]