首页 > 解决方案 > 如何在不排除有效空值的情况下排除空重复项 - SQL Server

问题描述

我正在使用 SQL Server 并试图提取某些数据。但是,某些行会弹出重复的订单 #,其中一行 # 为空,而另一行具有正确的值。

棘手的是,还有其他行#s 为空,如果我要进行过滤,line_id is not null那么我将排除所有具有空值的有效订单#s。我会使用案例陈述吗?子查询?我不知所措。

这是我的代码的精简版,我的意思是:

select
   order_number
   line_number
from table_1 

标签: sqlsql-server

解决方案


NOT EXISTS

select t.*
from tablename t
where t.line_number is not null
or not exists (
  select 1 from tablename
  where order_number = t.order_number and line_number is not null 
)

或带有ROW_NUMBER()窗口功能:

select t.order_number, t.line_number
from (
  select *,
    row_number() over (partition by order_number order by case when order_number is not null then 1 else 2 end) rn
  from tablename
) t
where t.rn = 1

推荐阅读