【问题标题】:SQL Server Set with duplicate records具有重复记录的 SQL Server 集
【发布时间】:2016-03-02 18:10:05
【问题描述】:

我对如何向数据库发送查询表示怀疑,该数据库为我提供了一组记录,这些记录可能仅在该组的一个列中包含某个值的重复项,并且我需要这些记录来提供整个集合但每个重复记录中只有一个记录。 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 的重复记录,它只给出出现在表上的第一条记录。

感谢您对此提供的帮助,因为我不知道如何完成此操作。

谢谢!

【问题讨论】:

标签: sql sql-server duplicates unique recordset


【解决方案1】:

使用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

如果您对 CTE 不满意,您可以将相同的逻辑应用于临时表或子查询。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-06-13
    • 2017-10-16
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 2011-01-13
    • 1970-01-01
    • 2016-01-19
    相关资源
    最近更新 更多