头发多不多跟it没有直接关系 2020-08-17 15:20 采纳率: 75%
浏览 168
已采纳

sql server需要把查询结果中的为null的数据放在最后,且为null的字段越少,该数据就越往前

在开发过程中,我碰到了一个数据排序的问题,大致情况是在某一张数据表中存在一些数据是空值的情况,显示的时候会比较丑,如图图片说明

因此,我想要对结果进行排序处理,让“不可用设备”、“随机设备”、“敏感性分析”这三个字段中非空的数据优先显示,详细的逻辑可以分解为:

1.“不可用设备”、“随机设备”、“敏感性分析”都为非空的数据最优先显示

2.存在两个字段非空,一个字段为空的情形:

     ①.“不可用设备”、“随机设备”非空,“敏感性分析”为空最优先显示
     ②.“不可用设备”、“敏感性分析”非空,“随机设备”为空次之
     ③.“随机设备”、“敏感性分析”非空,“不可用设备”为空最后显示

3.存在一个字段非空,两个字段为空的情形,也分三种情况:

     ①.“不可用设备非空最优先显示
     ②.“随机设备”非空次之
     ③.“敏感性分析”非空最后显示

4.三个字段都为空最后显示

在这种前提之下,按照字符串排序,那么sql应该怎么写呢

附上我写的代码,我试过了很多种方法,始终无法实现这种效果,有没有大神能教教我:

1.SELECT * FROM RM_RUL_Results WHERE 1=1
ORDER BY components nulls last, random_components nulls last, env nulls last

我在百度找到的其中一种方法,但是这种方法存在语法错误

图片说明

2.SELECT * FROM RM_RUL_Results WHERE 1=1
order by case when components is null then 'zzzzzzzzz' else components end,
case when random_components is null then 'zzzzzzzzz' else random_components end,
case when env is null then 'zzzzzzzzz' else env end

通过case when可以实现对第一个字段“不可用设备”(components)的排序,但是因为优先级的关系,随机设备(random_components)和敏感性分析(env)的空字段会出现在前面

图片说明

实在无奈了,有没有大神知道z'm'jie'jue

  • 写回答

2条回答 默认 最新

  • Joe.Lin 2020-08-17 15:46
    关注

    ORDER BY 字段 nulls last 非MSSQL的语法。

    SELECT * FROM (
    SELECT *,
    CASE WHEN 排序在前的条件 THEN 1 --排序在前的条件
    WHEN 排序在二的条件 THEN 2 -- 排序在二的条件

    WHEN 排序在二的条件 THEN 3 -- 排序在二的条件

    END px
    FROM RM_RUL_Results )
    ORDER BY px ASC

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥30 STM32 INMP441无法读取数据
  • ¥100 求汇川机器人IRCB300控制器和示教器同版本升级固件文件升级包
  • ¥15 用visualstudio2022创建vue项目后无法启动
  • ¥15 x趋于0时tanx-sinx极限可以拆开算吗
  • ¥500 把面具戴到人脸上,请大家贡献智慧
  • ¥15 任意一个散点图自己下载其js脚本文件并做成独立的案例页面,不要作在线的,要离线状态。
  • ¥15 各位 帮我看看如何写代码,打出来的图形要和如下图呈现的一样,急
  • ¥30 c#打开word开启修订并实时显示批注
  • ¥15 如何解决ldsc的这条报错/index error
  • ¥15 VS2022+WDK驱动开发环境