1. ホーム
  2. sql-server-2008

[解決済み] 重複行を取得し、単一列を基準にカウントする

2022-03-10 05:59:04

質問

1つのカラム(この場合はコード)に基づいて、そのカラムの値の重複がある明確な行を取得する必要があります。 行の他の情報と、重複している行の数とともに、例えば、以下のようになります。

ID     code     ownerName
--------------------------
1      001      Mr. Brown
2      001      Mr. Pink
3      002      Mr. White
4      003      Mr. Blonde

このクエリで返したいのは

ID     code     ownerName    count
----------------------------------
1      001      Mr. Brown      2

重複行の情報は、どちらが返されるかは問題ではありませんが、個別コードとカウントカラムの組み合わせに問題があります。

こんなクエリを試してみました。

SELECT DISTINCT A.code, A.ownerName 
FROM Customers A WHERE 
   EXISTS( SELECT * FROM Customers WHERE code = A.code AND id <> A.id) 
order by A.code;

しかし、カウントを取得するのに苦労しています。

SELECT code, COUNT(*) as numberDuplicates 
FROM Customers GROUP BY code HAVING COUNT(*) > 1

グループ分けしたくない他の情報を取得するのに苦労しています。 どなたか、正しいクエリの構成について教えていただけませんか?

どのように解決するのですか?

私があなたの探しているものを理解するならば、これはうまくいくはずです。

これは、一意でないコードを持つすべてのエントリを選択し、そのコードを使用しているレコードの数を返します。

SELECT DISTINCT A.ID, A.Code, A.ownerName, B.Count
FROM Customers A
JOIN (
  SELECT COUNT(*) as Count, B.Code
  FROM Customers B
  GROUP BY B.Code
) AS B ON A.Code = B.Code
WHERE B.Count > 1
ORDER by A.Code;