【问题标题】:How to get number of duplicates count SQL如何获取重复计数SQL
【发布时间】:2020-08-25 01:28:19
【问题描述】:

我有一张这样的桌子:

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

【问题讨论】:

    标签: sql sql-server count duplicates


    【解决方案1】:

    您可以使用子查询:

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

    【讨论】:

    • 当没有 dplucates 时返回 null,而不是当没有重复时我可以得到 0
    • @Gamma 。 . .使用COALESCE()。我更新了答案。
    【解决方案2】:

    你可以使用 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;
    

    【讨论】:

      【解决方案3】:
      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
      

      希望此查询适合您的情况

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-03-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        • 2015-01-04
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多