在开发过程中,我碰到了一个数据排序的问题,大致情况是在某一张数据表中存在一些数据是空值的情况,显示的时候会比较丑,如图
因此,我想要对结果进行排序处理,让“不可用设备”、“随机设备”、“敏感性分析”这三个字段中非空的数据优先显示,详细的逻辑可以分解为:
1.“不可用设备”、) o I c V“随机设备”、“敏感性分析”都为非空的数据最优先显示
2.存在两个字段非空,一个字段为空的情形:
①.“不可用设备”、“随机设备”非空,“敏感性分析”为空最优先显示
②.O X . ~ v“不可用设备”、“敏感性分析”非空,“随机设备”为空次之
③.“随机设备”、“敏感性分析”非空,“不可用设备”为空最后显示
3.存在一个字段非空,两个字段为空的情形,也分三种Q G E b N + @ v情况:
①.“不可用设备非空最优先显示
②.“随机r C p G Z A 2 ;设备”非空次之
③.“敏感性分析”非空最后显示
4.三个字段都为空最后显示
在x . w r A . 8这种前提之下,按照字符串排序,那么s8 s J q e D u ^ql应该怎么写呢
附上我写的代码,我试过了很多种方法,始终无法实现这种. B n + t q效果,有没有大神能教教我:
1.SELECT * FROM RM_RUL_Results WHERE 1=1
ORDER BY components nulls last, ranr - K 8 (dom_components nulls last, env nulls last
我在百# E m % a e 7 G k度找到的其中一种方法,但是这种方法存在语法错误
2.SELECT * FROM RM_RUL_Results WHERE 1=1
order by casK O 7 fe when components is null then 'zzzzzzzzz' else components end,
case when random_components is null then 'zzzzzzzzz' else random_cE { 7omponents end,
case when env is null then 'zzzzzzzzz' else env end
通过case when可以M Y Z 2 ? u a } 8实现对p l q第一个字段“不可用设备”(comK % : } q { Q tpo@ n y _ ! #nents)的排序,但是因为优先级的关系,随机设, X U ) 8备(random_components)和敏感性分析(en5 ? s G $ iv)的空字段会出现在前面
实在无奈了,有没有大神知L S S S # 5 r | R道z'm'jq . ! ? 7 x gie'jue
回答
ORDER BY 字段 nulls last 非MSU p v 7 d ( 0 { LSQL的语法。
SELECT * FROM (
SELECT *,
CASE WHEN 排序在前的条件 THEN 1 --u * a f `排序在前的条件
WHEN 排序在二的条件 THEN 2 -- 排序在二的条件
WHEN 排序在二的条件 THEN 3 -- 排序在二的条件
END px
FROMs D D A Y N ^ e RM_RC i k 3 3 5 cUL_Results )
ORDER BY px ASC
发表评论