我需要根据单个列(在本例中为代码)获取不同的行,其中存在重复的列值。与行中的其他信息以及重复行的数量一起。例如:
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
我无法获取其他我不想分组的信息。任何人都可以帮我弄清楚如何构建正确的查询?
答案 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;