2

一連のORDERBY命令に従って値を引き出すクエリを作成しています

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式を両方の順序で配置することですが、各行に使用するのは1つだけです。

于 2012-08-23T12:15:52.177 に答える