Как получить количество дубликатов SQL - PullRequest
0 голосов
/ 09 мая 2020

У меня есть примерно такая таблица:

declare @Product table  (ProductId int)

insert into @Product select 1155
insert into @Product select 1155  
insert into @Product select 1159 
insert into @Product select 1154  
insert into @Product select 1154  
insert into @Product select 1152 
insert into @Product select 1151 

Мне нужно присвоить количество дубликатов переменной

DECLARE @duplicateCount INT;

Я написал запрос для проверки дубликатов

SELECT COUNT(c.ProductId)
FROM @Product c
GROUP BY c.ProductId
HAVING COUNT(*) > 1

Этот запрос возвращает следующий результат:

+------------------+
| (No column name) |
+------------------+
| 2                |
| 2                |
+------------------+

Вместо этого мне нужно установить количество повторяющихся записей на @duplicateCount, так как в приведенном выше примере количество должно быть 4

Ответы [ 3 ]

1 голос
/ 09 мая 2020

Вы можете использовать CTE

;with cte(cnt) as
(
SELECT count(c.ProductId)
    FROM @Product c
GROUP BY c.ProductId
  HAVING COUNT(*) > 1
)
select isnull(sum(cnt),0) cnt from cte;
1 голос
/ 09 мая 2020
DECLARE @duplicateCount INT

;WITH CTE(Cnt_PID) AS (
SELECT COUNT(C.PRODUCTID)
FROM @PRODUCT C
GROUP BY C.PRODUCTID
HAVING COUNT(C.PRODUCTID) > 1)

SELECT @duplicateCount=SUM(CNT_PID) FROM CTE

SELECT @duplicateCount AS DUPCNT

Надеюсь, этот запрос отлично подойдет для вашего случая

1 голос
/ 09 мая 2020

Вы можете использовать подзапрос:

SELECT @duplicateCount = COALESCE(SUM(cnt), 0)
FROM (SELECT count(c.ProductId) as cnt
      FROM @Product c
      GROUP BY c.ProductId
      HAVING COUNT(*) > 1
     ) p
...