我有一张如下表格,
|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 |
我想通过订单asc,描述asc,品牌asc,产品asc订购, 但订单null和99应被视为一个组,然后按品牌和产品排序。
预期结果应如下所示,
|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始终是第一个或最后一个,但是我需要一个查询来根据每个条件使用不同的字段排序。
答案 0 :(得分:1)
可以使用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;