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