T-sql缩小存在重复项的结果

时间:2017-01-10 20:50:05

标签: sql-server tsql

我正在尝试找到一个解决方案,我可以将结果限制在找到重复ID的数据表上。

示例数据示例:

ID   | Typeofstaff | Role
---------------------------------------  
779  |    2        |  284
779  |    5        |  276
1299 |    5        |  488
1299 |    2        |  322
627  |    4        |  456
627  |    4        |  476
898  |    5        |  321
999  |    3        |  567
1027 |   null      |  890
1027 |    2        |  891

如果[ID]重复且他们有[Typeofstaff] = 2,那么只需显示[Typeofstaff] = 2 的行 向我显示下一个最高数字3,4或[Typeofstaff]中的5,但不是重复的[ID]。

如果[ID]& [Typeofstaff]重复,然后显示其中一行。

如果[ID]中不存在重复项,则正常显示该行。

1 个答案:

答案 0 :(得分:1)

您可以使用ROW_NUMBER()执行此操作:

SELECT ID, Typeofstaff, Role,
FROM (
  SELECT ID, Typeofstaff, Role,
        ROW_NUMBER() OVER (PARTITION BY ID ORDER BY COALESCE(TypeofStaff,1000) ASC) AS RN
) X
WHERE RN = 1