删除SQL Server查询中的重复行

时间:2014-06-20 07:39:04

标签: duplicates

我们如何在sqlserver查询中删除或不显示带有一些条件子句的重复行,案例看起来像这样,

code    decs
-------------------------
G-006   New
G-006   Re-Registration

我们如何只用G-006描述显示Re-Registration,我尝试过这个查询但没有运气

with x as (
            select  new_registration_no,category,rn = row_number()
      over(PARTITION BY new_registration_no order by new_registration_no)
      from  equipment_registrations 
)
select * from x

1 个答案:

答案 0 :(得分:1)

通过在PARTITION BY和ORDER BY子句中使用相同的字段,rn字段将始终等于1.

假设new_registration_no = code和category = decs,您可以将ORDER BY字段更改为ORDER BY category DESC以获得该结果。但是,这是一个非常随意的ORDER BY - 您只是将其基于随机文本值。我也不能100%确定ROW_NUMBER()函数在CTE中的工作情况。

更好的解决方案可能是:

SELECT *
FROM 
  (
    SELECT 
        New_Registration_No, 
        Category, 
        ROW_NUMBER() OVER 
          (
            PARTITION BY New_Registration_No 
            ORDER BY 
                CASE 
                    WHEN Category = 'Re-Registration' THEN 1
                    WHEN Category = 'New' THEN 2
                    ELSE 3
                END ASC ) rn
    FROM Equipment_Registrations
  ) s
WHERE rn = 1

您可以将CASE声明中的顺序设置为您想要的任何内容 - 我担心如果没有更多信息,这是我能为您提供的最佳解决方案。如果您有可能出现在该字段中的已知值列表,则应该很容易;如果没有,配置会有点困难,但这将基于您原始帖子中未包含的业务规则。