我正在构建一个根据一组ORDER BY指令拉出值的查询
SELECT * from values ORDER BY displayOrder, actualValue, field(key, 'A', 'B', 'C')
所以这可能会回归:
name productType displayOrder actualValue key
object_a X 1 1.2 A
object_b Z 1 1.2 C
object_c Z 1 1.6 B
object_d X 1 1.8 B
但是,如果productType = Z,我想切换ORDER BY actualValue和field(key)以产生以下内容:
name productType displayOrder actualValue key
object_a X 1 1.2 A
object_c Z 1 1.6 B
object_b Z 1 1.2 C
object_d X 1 1.8 B
这有可能吗?
答案 0 :(得分:1)
试试这个:
SELECT *
FROM values
ORDER BY
displayOrder
, CASE WHEN productType <> Z THEN actualValue ELSE 0.0 END
, CASE WHEN productType <> Z THEN field(key, 'A', 'B', 'C') ELSE 0 END
, CASE WHEN productType = Z THEN field(key, 'A', 'B', 'C') ELSE 0 END
, CASE WHEN productType = Z THEN actualValue ELSE 0.0 END
我们的想法是将order by
表达式放在两个订单中,但每行只使用其中一个。