在一个查询中动态排序

时间:2012-08-23 12:07:40

标签: mysql sql

我正在构建一个根据一组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

这有可能吗?

1 个答案:

答案 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表达式放在两个订单中,但每行只使用其中一个。

相关问题