需要 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 在不同的列中查找具有重复值的记录的主要内容,如果未能解决你的问题,请参考以下文章