2011-12-22 5 views
3

その列の値が重複している単一の列(この場合はコード)に基づいて異なる行を取得する必要があります。行の他の情報と重複行の数に加えて、例えば:重複する行を取得し、単一の列に基づいて数えます。

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 

と私は私がして、グループにしたくない他の情報を得るトラブルを抱えています。誰でも正しいクエリを構造化する方法を理解する手助けはできますか?

答えて

9

私はあなたが探しているものを理解していれば、これは動作するはずです:

これは、非固有のコードを持つすべてのエントリを選択し、そのコードを使用してレコードの数を返します。

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; 
+0

はいそれは私が探していたまさにですが、私はちょうど選択リストにB.countを追加しました。ありがとう。 – user501211

0

は、私はあなたがこのことができます願ってい

 SELECT TOP 1 C.ID, C.Code, C.OwnerName, C1.NumberDuplicates 
     FROM 
     Customers C 
     INNER JOIN 
     (
     SELECT Code, COUNT(*) as NumberDuplicates FROM Customers GROUP BY code HAVING COUNT(*) > 1 
     ) C1 
     ON C.Code = C1.Code 

下のような何かを試すことができると思います!

0
SELECT COUNT(DISTINCT CustomerID) AS NumberOfCustomers FROM Orders; 
関連する問題