2

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

这有可能吗?

4

1 回答 1

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表达式按两种顺序排列,但每行只使用其中一个。

于 2012-08-23T12:15:52.177 回答