2012-08-23 15 views
2

我構建的是根據指令訂單通過動態中的一個查詢

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 

Is這有可能以任何方式?

回答

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表現在兩個訂單,但只使用其中的每行一個。