需要窗口函数来订购null和非null值

时间:2017-02-23 15:50:00

标签: sql sql-server row-number

在以下数据集中,我尝试使用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

3 个答案:

答案 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_NUMBERNULL语句,根据需要对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;