sql – 在另一列上分组的两列不同

我正在尝试在sql Server的另一列上分组的两列上获得重复值的数量.

以下是我正在处理的示例场景.

DECLARE @mytable TABLE (CampName varchar(10),ID VARCHAR(10),ListName varchar(10))
    INSERT INTO @mytable
            ( CampName,ID,ListName )
    VALUES  ( 'A','X','Y' ),( 'A','Y','Z' ),'P','Q' ),( 'B','R','S' ),'S' )

这将导致下表.

CampName   ID  ListName
-------------------------------------
      A     X     Y
      A     X     Y -- Duplicate Record
      A     Y     Z
      A     Y     Z -- Duplicate Record
      A     Y     Z -- Duplicate Record
      A     P     Q
      B     X     Y 
      B     X     Y -- Duplicate Record
      B     Y     Z
      B     Y     Z -- Duplicate Record
      B     Y     Z -- Duplicate Record
      B     P     Q
      B     R     S
      B     R     S -- Duplicate Record

我需要输出如下:

CampName   dupcount
-------------------
A            3
B            4

基本上,我需要找出每个CampName的重复次数(ID,ListName),而不管重复值是多少.

让我知道,如果我能澄清这方面的其他事情.
任何帮助将不胜感激.

解决方法

您可以使用以下查询
SELECT CampName,SUM(cnt) AS dupcount
FROM (
  SELECT CampName,COUNT(*) - 1 AS cnt
  FROM @mytable
  GROUP BY CampName,ListName
  HAVING COUNT(*) > 1) AS t
GROUP BY CampName

内部查询使用HAVING子句来过滤非重复条目.它还计算每个ID,ListName的重复记录数.外部查询只是将重复次数加起来.

相关文章

SELECT a.*,b.dp_name,c.pa_name,fm_name=(CASE WHEN a.fm_n...
if not exists(select name from syscolumns where name=&am...
select a.*,pano=a.pa_no,b.pa_name,f.dp_name,e.fw_state_n...
要在 SQL Server 2019 中设置定时自动重启,可以使用 Window...
您收到的错误消息表明数据库 'EastRiver' 的...
首先我需要查询出需要使用SQL Server Profiler跟踪的数据库标...