【问题标题】:Query to get duplicate records in SQL Server 2008查询以获取 SQL Server 2008 中的重复记录
【发布时间】:2014-01-21 06:38:18
【问题描述】:

结合两列时如何从表中获取重复记录。

我的表值:

UserId     ProgramId 
100          1 
100          1 
100          1 
100          2 
101          2 
101          2 
100          3 
101          3 
102          4 
102          4 
103          5 

期望的输出:

UserId      ProgramId 
100          1 
100          2 
100          3 
101          2 
101          3 

我尝试了以下查询来获取表中不同 ProgramID 的 UserId 的重复值。

SELECT [UserId],[ProgramId],COUNT([UserId]) FROM [Table1]
GROUP BY [UserId],[ProgramId]
HAVING COUNT([UserId]) > 1
order by [UserId]

我正在获取 UserId、ProgramId 和重复行数,但没有为不同的 ProgramId 指定。我的查询中有什么错误???。任何建议都会很有帮助。

【问题讨论】:

    标签: sql-server-2008 distinct


    【解决方案1】:

    您似乎可以使用以下查询来获取结果。这使用 CTE 生成具有多个不同 programidsuserids 列表。一旦你有了它,你就可以用它来加入你的桌子来获得useridprogramid的组合:

    ;with cte as
    (
      select userid
      from table1
      group by userid
      having count(distinct programid) > 1
    ) 
    select distinct c.userid, t.programid
    from cte c
    inner join table1 t
      on c.userid = t.userid;
    

    SQL Fiddle with Demo

    【讨论】:

      【解决方案2】:

      您指望分组所依据的同一列之一,它始终是一 (1)。

      试试这样吧:

      SELECT   [UserId],[ProgramId],COUNT(*)
      FROM     [Table1]
      GROUP BY [UserId],[ProgramId]
      HAVING   COUNT(*) > 1
      order by [UserId]
      

      当然DISTINCT 会做同样的事情:

      SELECT DISTINCT
               [UserId],[ProgramId]
      FROM     [Table1]
      order by [UserId]
      

      ..因为DISTINCT 实际上只是一个简化的GROUP BY,但它不是可扩展/可编辑的。而且因为我假设你想用它做更多的事情,而不仅仅是我们在这里看到的......

      【讨论】:

        猜你喜欢
        • 2012-09-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-02
        • 1970-01-01
        相关资源
        最近更新 更多