sql - 需要窗口函数来对空值和非空值进行排序

标签 sql sql-server row-number

在以下数据集中,我尝试删除具有 NULL LocName 的 ES Hou 实体。我想保留其他三个记录。我一直在尝试使用 row_number() 函数来执行此操作,但我不知道如何获取非空值以获得比空值更高的排名。有什么建议吗?

    PracticeId  LastName  EntityId LocId  EntityName  LocName  PracName
    53681       Thomas    3194     2222   ECS Tampa   NULL     NULL
    53681       Thomas    3195     2222   ECS Atlanta NULL     NULL
    53681       Thomas    3222     2222   ES Hou      NULL     NULL
    53681       Thomas    3222     2434   ES Hou      ECS Hou  Regional Med

最佳答案

Row_Number窗口函数中,LocName按降序排列,NULL值将排在最后

Select * from
(
select Row_Number()over(Partition by EntityName Order by LocName desc) Rn, *
From yourtable 
) A
Where Rn = 1

注意:如果EntityName有多个NOT NULL LocName,那么它只会带来一条记录

关于sql - 需要窗口函数来对空值和非空值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42420358/

相关文章:

mysql - 选择 mysql 子选择中的下一行

sql - 如何使这个 SQL 查询更短?

sql-server - SSDT、SSDT-BI 在不同 SQL 版本的向后兼容性方面的混淆

Oracle:如何重新启动 row_number 函数

c# - SQL 索引表连接

sql-server - SSRS报告文件(.rdl)如何升级到最新?

php - 如何在 MySQL 数据库中查找前 5 个重复条目?

c# - MySql 从列中选择所有数据并计数

SQL 声明主键或主键约束