SQL 有重复记录的服务器集

SQL Server Set with duplicate records

我对如何向数据库发送查询有疑问,该数据库为我提供了一组记录,这些记录可能仅在该组的一列中包含某个值的重复项,而我需要从这些记录中提供整个集合,但每个重复记录中只有一个记录。 DISTINCT 对我来说效果不佳,因为整个记录可能会有所不同。例如,当我询问结果集时,它给出以下内容:

╔═════════════════╦══════════════╦════════════╗
║ ContratctNumber ║ BusinessType ║ PersonType ║
╠═════════════════╬══════════════╬════════════╣
║           12345 ║            1 ║          1 ║
║           23455 ║            3 ║          1 ║
║          275479 ║            1 ║          2 ║
║          275479 ║            2 ║          1 ║
║          275479 ║            3 ║          2 ║
║          234576 ║            2 ║          1 ║
║           78656 ║            1 ║          1 ║
║            5678 ║            3 ║          1 ║
║            5678 ║            2 ║          1 ║
╚═════════════════╩══════════════╩════════════╝

结果我需要的是:

╔═════════════════╦══════════════╦════════════╗
║ ContratctNumber ║ BusinessType ║ PersonType ║
╠═════════════════╬══════════════╬════════════╣
║           12345 ║            1 ║          1 ║
║           23455 ║            3 ║          1 ║
║          275479 ║            1 ║          2 ║
║          234576 ║            2 ║          1 ║
║           78656 ║            1 ║          1 ║
║            5678 ║            3 ║          1 ║
╚═════════════════╩══════════════╩════════════╝

如您所见,它给了我所有的集合,但是对于具有相同 ContractNumber 的重复记录,它只给出了出现在 table 上的第一条记录。

非常感谢你在这方面的帮助,因为我不知道如何完成它。

谢谢!

使用 row_number 自定义排序。此查询将为 partition 子句中每个标识符的唯一组合占一行。当存在多行时,它将选择最低的 BusinessType。

; with CTE as (
    select *
    , row_number() over (partition by ContractNumber, Person Type 
                         order by BusinessType) as RN
    from MyTable)

Select * from CTE where RN = 1

如果您不喜欢table CTE,您可以将相同的逻辑应用于临时table 或子查询。