按SQL查询中的c_criticality字段对表进行排序

时间:2019-09-26 12:47:50

标签: mysql sql

我在工作订单中只有一个场域C_criticality。

在C_criticality字段中有三个选项

  1. 关键
  2. 非关键
  3. 工具 4.null或空

在该C_criticality字段中,某些列为null(空),应最后出现。 现在,我必须按重要性对输出进行排序,非关键性,工具会出现null值(空值)。

创建表工作单 ( wonum int, C_criticality varchar(255), );

插入工作单(wonum,C_criticality) 值(2,“关键”); 插入工作订单(wonum,C_critical) 值(1,“非关键”); 插入工作订单(wonum,C_critical) 值(15,“关键”); 插入工作订单(wonum,C_critical) 值(12,“工具”); 插入工作订单(wonum,C_critical) 值(21,“非关键”); 插入工作订单(wonum,C_critical) VALUES(11,'');

输出:-

 C_criticality           wonum
   critical                2
   critical                15
  non-critical             21
   tool                    12
   null                   11

4 个答案:

答案 0 :(得分:2)

由于您已标记 mysql ,因此查询将类似,

if 1 => 1 2 3 ... 15(last page) if 2 => 1 2 3 ...15 if 3 => 1 2 3 
4 ... 15 if 4 => 1...3 4 5...15 if 15 =>1...13 14 15 if 14=>1... 
13 14 15 if 13 => 1 ... 12 13 14 15 if 12 => 1 ... 11 12 13 ... 15

答案 1 :(得分:2)

我们可以尝试使用ISNULLFIELD进行两层排序:

SELECT *
FROM yourTable
ORDER BY
    ISNULL(C_criticality),   -- 0 for non NULL, 1 for NULL
    FIELD(C_criticality, 'criticality', 'noncritical', 'tool');

FIELD的呼叫将根据您提供的列表进行排序。

答案 2 :(得分:2)

这适用于所有SQL引擎,不仅限于MySQL

select *
from workorder
order by case when C_criticality = 'critical' then 1
              when C_criticality = 'non-critical' then 2
              when C_criticality = 'tools' then 3
              else 4
         end

答案 3 :(得分:0)

这取决于DBMS。在某些选项中,NULLS FIRSTNULLS LAST 在MySQL中,您可以找到本文有趣的https://www.designcise.com/web/tutorial/how-to-order-null-values-first-or-last-in-mysql