我有一个非常简单的表,看起来像这样:
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;
感谢您的光临和帮助!
答案 0 :(得分:0)
我的答案基于SQL Server。 您应该取消表的位置。这样,您将所有列都作为行。 然后,对您的最后一个查询将得到您想要的结果。
问题是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;