在 SQL 服务器中获取多个重复行的查询

Query in getting multiple duplicate rows in SQL Server

我有 2 个表 Table1Table2,我想在其中获取重复行的总数:

预期输出:

测试查询:

SELECT 
    t1.name,
    t1.duplicates,
    ISNULL(t2.active, 0) AS active,
    ISNULL(t3.inactive, 0) AS inactive 
FROM 
    (SELECT
         t1.name, COUNT(*) AS duplicates 
     FROM 
         (SELECT c.name  
          FROM table1 c 
          INNER JOIN table2 as cd on cd.id = c.id)) t1  
    GROUP BY 
        name 
    HAVING 
        COUNT(*) > 1) t1  
LEFT JOIN 
    (SELECT c.name, COUNT(*) AS active 
     FROM table1 c 
     WHERE name IN (SELECT c.name FROM table1 c) 
     GROUP BY c.name AND status = 'Active' 
     GROUP BY name) t2 ON t1.name = t2.name  
LEFT JOIN 
    (SELECT c.name, COUNT(*) AS inactive 
     FROM table1 c  
     WHERE name IN (SELECT c.name FROM table1 c GROUP BY c.name)  
       AND status = 'InActive'
     GROUP BY name) t3 ON t1.name = t3.name 
ORDER BY 
    name

它仍然返回重复的行,我无法获取 ID 和创建者列

如果您能原谅 subqueryleft join,我建议您进行以下查询:

select b.*,
       count(creator) as creator_count
 from
  (select a.mainid,
          a.name,
          sum(case when a.status = "active"
              then 1 else 0 end) as active_count,
          sum(case when a.status = "inactive"
              then 1 else 0 end) as inactive_count,
          count(a.name) as duplicate_count
    from table1 as a
    group by a.name
    having count(a.name) > 1) as b
  left join table2 as c
  on b.mainid = c.mainid
  group by c.mainid
  having count(c.creator) > 1

而不是强迫我们直接加入两个table。首先,导出我们可以从 Table1 中获得的信息,然后将其与 Table2 相结合以获得 creator count.

SQL Fiddle: http://sqlfiddle.com/#!9/4daa19e/28