1.场景
这次遇到业务场景稍微复杂一些,需求是这样的:
仓库表中有三个字段,分别是:
仓库权属(自有-1、租赁-2)
物联网(有-1、无-0)
电子仓单系统(有-1,2、无-3,0)需要根据标签的数量进行排序,依次是3>2>1>0,在同类型中又会存在相应的顺序,具体顺序如下图所示
2.思路
个人认为难点在于sql该如何编写,通过sql的方式来对数据进行排序,因为通过Java代码看起来比较困难。
言归正传,我用的解决方案是 把每一条数据的这三个字段通过使用IF函数来分别进行取值,满足条件的取1,不满足条件的取0,然后把三个IF相加得到的结果进行DESC倒序排列,三个IF相加的最大的结果就是3,最小的结果就是0,这样就可以达到按照标签排序的目的了;每个标签中各自的顺序,则在后面继续添加相应的排序就可以了,最后再根据updateTime进行一个倒序排序。具体请看如下sql
3.解决方案
#WarehouseOwnership 仓库权属,1:自有,2:租赁
#WarehouseIotLoad 是否加载物联网设施,0:否,1:是
#ReceiptSystemOperation 电子仓单运营系统情况 1,2:存在,3:不存在
SELECT
WarehouseName,
WarehouseOwnership,
WarehouseIotLoad,
ReceiptSystemOperation
FROM
warehouse
ORDER BY
(IF( WarehouseOwnership IN (1,2),1,0)+IF( ReceiptSystemOperation IN (1,2),1,0)+IF( WarehouseIotLoad = 1,1,0)) DESC,
WarehouseOwnership = 1 DESC,IF(ReceiptSystemOperation IN (1,2),1,0) DESC,IF(WarehouseIotLoad=1,1,0) DESC,UpdateTime DESC;