sql-server - 如何添加一个新列,根据 SQL Server 中另一列的值标记列的重复项?

标签 sql-server duplicates

我正在尝试通过添加一个列来修改表,该列可以标记所有重复项 Runner_Name基于 Track_Num .我尝试使用:

SELECT [Track_Num],
       ROW_NUMBER() OVER (PARTITION BY [Track_Num] ORDER BY [Runner_Name]) - 1 As Dup,
       [Runner_Name]
  FROM [runner]

但它不起作用,它只是对 Runner_Name 进行排序

runner看起来像这样:
Track_Num     Runner_Name
   1            John
   1            John
   1            Jack
   2            Amy
   2            Mary
   2            John
   3            Josh
   3            Josh
   3            Taylor

我希望得到的所需表是:
Track_Num     Runner_Name    Dup
   1            John          1
   1            John          1
   1            Jack          NULL
   2            Amy           NULL
   2            Mary          NULL
   2            John          NULL
   3            Josh          1
   3            Josh          1
   3            Taylor        NULL

最佳答案

也许只是将窗口函数包装在 sign(nullif( ... ,1))

示例

Select *
      ,Dup = sign(NullIf(sum(1) over (partition by  [Track_Num],[Runner_Name] ) ,1))
 From [runner]

退货
Track_Num   Runner_Name Dup
1   Jack    NULL
1   John    1
1   John    1
2   Amy     NULL
2   John    NULL
2   Mary    NULL
3   Josh    1
3   Josh    1
3   Taylor  NULL

关于sql-server - 如何添加一个新列,根据 SQL Server 中另一列的值标记列的重复项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56192674/

相关文章:

mysql - SQL如何删除特定列的重复行并保留一个

sql-server - 检查 XML 元素是否在 SQL 中标记为 `xsi:nil`

sql - 主键和代理键有什么区别?

c# - 如何在 gridview asp.net 中显示查询计划

java - 当我将重复元素添加到 HashSet 时会发生什么?旧元素是否被覆盖?

python - 从目录中删除重复项并将它们保存在另一个目录中

mysql - #1060 - 重复的列名

SQL 将多行转换为多列

sql-server - 使用 SQL Server 将多行合并为一行?

Excel VBA删除重复项保持定位