Получить повторяющиеся строки и рассчитывать на основе одного столбца - PullRequest
4 голосов
/ 22 декабря 2011

Мне нужно получить отдельные строки на основе одного столбца (в данном случае кода), где есть дубликаты этого значения столбца.Наряду с другой информацией из строки и количество повторяющихся строк есть.например:

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

У меня проблемы с получением другой информации, которую я не хочу группировать.Может кто-нибудь помочь мне понять, как правильно составить запрос?

Ответы [ 3 ]

11 голосов
/ 22 декабря 2011

Если я понимаю, что вы ищете, это должно работать:

Это выберет все записи с неуникальным кодом и вернет количество записей, использующих этот код.

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 голосов
/ 08 ноября 2013
SELECT COUNT(DISTINCT CustomerID) AS NumberOfCustomers FROM Orders;
0 голосов
/ 22 декабря 2011

Я думаю, вы можете попробовать что-то вроде ниже

       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

Надеюсь, это поможет !!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...