sql - 列操作和消除重复

标签 sql sql-server sql-server-2008 t-sql

我有下面这个特定的表格。我想从第 2 组中消除重复的类(class),因为它位于第 1 组中。基本上,如果类(class)映射到强制的第 1 组,我们只需考虑这一点,而不是在任何其他组中。我必须先检查重复类(class),然后删除重复类(class),这不是强制性的。


    Program   Group Course     Mandatory
     Program1   1   a          YES
     Program1   1   b          YES
     Program1   1   c          YES
     Program1   2   d          NO
     Program1   2   a          NO
     Program1   2   e          NO
     Program1   3   f          YES  

我无法弄清楚相同的列操作,或者我今天不工作(:-)) 我尝试过使用计数操作并为重复行创建标志,但无法使用 group by 子句中的“Group”来执行此操作。

输出:

    Program   Group Course     Mandatory
     Program1   1   a          YES
     Program1   1   b          YES
     Program1   1   c          YES
     Program1   2   d          NO
     Program1   2   e          NO
     Program1   3   f          YES  

编辑

我们怎样才能 检查重复记录并仅将其从一个特定组中删除。

最佳答案

您可以使用 ROW_NUMBER() 函数来实现此目的:

SELECT *
FROM (SELECT *, ROW_NUMBER() OVER (PARTITION BY COURSE ORDER BY [Group] ) as RowRank
      FROM table
     )sub
WHERE RowRank = 1

演示:SQL Fiddle

编辑:ROW_NUMBER 为每行分配一个编号。对于您通过 PARTITION BY 部分分配的每个分组,编号将从 1 开始,在这种情况下,每个类(class)都会有一个编号 1 并向上。数字的顺序由 ORDER BY 部分确定,在本例中,最低的 [Group] 获得 1。

关于sql - 列操作和消除重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17329388/

相关文章:

SQL - 聚合函数 - GROUP BY 子句

sql-server-2008 - 我不小心删除了我的 SQL 数据库中的所有登录名,现在我无法连接

sql-server - tSQLt - 处理多个 SQL Server 结果集

sql-server - 如何在 SQL Server 中获取上个月的第一天和最后一天(带时间戳)

sql-server-2008 - SQL Server Set变量(如果存在),否则插入到表中

sql - 获取两个日期之间每个月的开始和结束时间

mysql - SQL使用不同的返回重复记录

Mysql只选择父级存在的行

c# - 查询时防止丢失 [MEMNO] 值中的前导零?

mysql SELECT 超过 1 个或