Как обнаружить дубликаты в этом сценарии с учетом внутренней дифференциации? - PullRequest
0 голосов
/ 20 февраля 2019

У меня есть этот SQL-запрос, и он функционально обнаруживает повторяющиеся вхождения [Type].

select Type, count(1) as 'Occurences' from [dbo].[Policy]
 where PolicyDescription ='ABC' 
group by Type
 HAVING COUNT(1)>1

НО в той же таблице [Policy] также есть столбец [Id], и мой запрос выше делаетне дифференцировать на основе [Id].

Я бы хотел, чтобы в приведенном выше запросе учитывались только те результаты, в которых [Id] также отличается.

Какие изменения я должен реализовать?

Пример данных

DECLARE @Policy AS TABLE
(
    ID int,
    PolicyDescription char(3),
    Type int
)

INSERT INTO @Policy(ID, PolicyDescription, Type) VALUES
(1, 'ABC', 123),
(1, 'ABC', 123),
(2, 'ABC', 456),
(3, 'ABC', 567),
(4, 'ABC', 567),
(3, 'ABC', 567)

Текущий результат

 Type | Occurences
------|------------
   123|           2
   567|           3

Желаемый результат

 Type | Occurences
------|------------
   567|           2 

Ответы [ 2 ]

0 голосов
/ 20 февраля 2019

Вам нужно только изменить:

from policy

на:

from (select distinct * from policy)

вот так:

select t.type, count(1) as 'Occurences' 
from (select distinct * from policy) t
where t.policydescription ='ABC' 
group by t.type
having count(1) > 1

См. демо

0 голосов
/ 20 февраля 2019

Вы можете объединить свои COUNT с DISTINCT.

SELECT Type, COUNT(DISTINCT Id) AS 'Occurences'
FROM Policy
WHERE PolicyDescription = 'ABC'
GROUP BY Type
HAVING COUNT(DISTINCT Id) > 1
...