在以下数据集中,我尝试使用NULL LocName删除ES Hou实体。我想保留其他三个记录。我一直在尝试使用row_number()函数执行此操作,但我无法弄清楚如何获取非空值以获得比空值更高的排名。有什么建议吗?
>>> df_old.assign(**{k: df_new[k] for k in replace if replace[k]})
A B C D E
0 0.0 1.0 0.0 1.0 0.0
1 0.0 1.0 0.0 1.0 0.0
2 0.0 1.0 0.0 1.0 0.0
3 0.0 1.0 0.0 1.0 0.0
4 0.0 1.0 0.0 1.0 0.0
答案 0 :(得分:2)
在Row_Number
窗口函数顺序中,LocName
按降序排列,NULL
值将在结尾排序
Select * from
(
select Row_Number()over(Partition by EntityName Order by LocName desc) Rn, *
From yourtable
) A
Where Rn = 1
注意:如果LocName
有多个NOT NULL EntityName
,那么它只会带一条记录
答案 1 :(得分:0)
您可以在IIF
函数中使用ROW_NUMBER
或NULL
语句,根据需要对SELECT
*
, ROW_NUMBER() OVER(ORDER BY IIF(LocName IS NULL, 0, 1), SomeOtherColumnToSort) AS SortOrder
FROM
Table
值进行排序。
FallbackProvider
答案 2 :(得分:0)
您可以将row_number与case一起使用来创建自定义顺序,其中null位于非null值之后。我们可以按升序对locname进行排序,但是会按特定顺序选择一行(在问题中没有说明)。
select * from (
select
t.*,
row_number() over (partition by entityname
order by case when locname is null then 1 else 0 end) rn
from your_table t
) t where rn = 1;