获取基于单列的重复行和计数

时间:2011-12-22 18:27:21

标签: sql-server-2008 tsql

我需要根据单个列(在本例中为代码)获取不同的行,其中存在重复的列值。与行中的其他信息以及重复行的数量一起。例如:

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

重复的行信息与返回的内容无关,但我在将不同的代码与count列组合时遇到了问题。

我尝试过这样的查询:

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

我无法获取其他我不想分组的信息。任何人都可以帮我弄清楚如何构建正确的查询?

3 个答案:

答案 0 :(得分:11)

如果我理解你在寻找什么,这应该有效:

这将选择具有非唯一代码的所有条目,并使用该代码返回记录数。

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;

答案 1 :(得分: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

希望这有助于!!

答案 2 :(得分:0)

SELECT COUNT(DISTINCT CustomerID) AS NumberOfCustomers FROM Orders;