我有如下表格,
|Product |Brand |Order |Description | --------------------------------------------------------- |TTT | CCC | 1 | FFF | |EEE | DDD | 2 | DDD | |ZZZ | BBB | 99 | NULL | |NNN | FFF | 99 | NULL | |QQQ | EEE | NULL | NULL | |BBB | FFF | 1 | FFF | |BBB | GGG | 1 | CCC | |GGG | NULL | NULL | NULL | |MMM | BBB | 99 | NULL |
我想按订单递增、描述递增、品牌递增、产品递增、 但 Order null 和 99 应视为一组,然后按 Brand 和 Product 排序。
预期结果应该如下所示,
|Product | Brand |Order |Description | --------------------------------------------------------- |BBB | GGG | 1 | CCC | |TTT | CCC | 1 | FFF | |BBB | FFF | 1 | FFF | |EEE | DDD | 2 | DDD | |MMM | BBB | 99 | NULL | |ZZZ | BBB | 99 | NULL | |QQQ | EEE | NULL | NULL | |NNN | FFF | 99 | NULL | |GGG | NULL | NULL | NULL |
null 总是最先或最后,但我需要一个查询以根据每个条件使用不同的字段排序。
最佳答案
此类异常可以用 CASE expressions 处理.
当Order
为NULL时,应该像99一样处理,所以把NULL换成99。
当 Order
为 NULL 或 99 时,应该忽略描述,因此在这种情况下,将 Description
替换为固定值:
SELECT ...
ORDER BY CASE WHEN "Order" IS NULL THEN 99 ELSE "Order" END,
CASE WHEN "Order" IS NULL OR "Order" = 99 THEN 0 ELSE Description END,
Brand,
Product;
关于android - 多个 order by 和 null 值使用下一个字段排序,而不是第一个或最后一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690126/