【问题标题】:Need SQL to find records with repeating values across separate columns需要 SQL 在不同的列中查找具有重复值的记录
【发布时间】: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;

感谢您的关注和帮助!

【问题讨论】:

  • 好的,我已编辑帖子以包含此内容。我没有打扰,因为它不符合我的要求。

标签: sql ms-access


【解决方案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;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2019-04-19
    • 2020-08-07
    相关资源
    最近更新 更多