2013-04-05 148 views
-2

我有一個表郵編看起來像這樣排序在MySQL

Code  State Region  Distance 
    25696  1  5    150 
    25692  1  4    60 
    25691  2  3    50 
    25690  2  2    233 
    25688  3  4    450 
    25686  3  5    560 
    25685  4  7    50 
    12069  4  8    30 
    12068  4  5    60 
    12067  6  3    80 
    12066  7  1    90 

現在我想這個數據,如果狀態4是由國家通過距離來選擇,然後一階,然後4個地區那麼剩下的像排序,不管區域,按距離排序。

所以結果應該是升序這個

Code  State Region  Distance 
    12068  4  5    60 
    25685  4  7    50 
    12069  4  8    30 
    25691  2  3    50 
    25692  1  4    60 
    12067  6  3    80 
    12066  7  1    90 
    25696  1  5    150 
    25690  2  2    233 
    25690  2  2    233 
    25686  3  5    560 

一是國家4個區域,然後休息日期由距離不分地區,國家排序。

餘米嘗試下面的查詢

SELECT region,br.state, case when state = 4 then -1 
          else state end as StateOrder, 

    FROM zipcode 
    ORDER BY StateOrder,region, Distance asc; 

該查詢給國家首先在有序4個區域,但其餘數據也與分類國家和地區,這需要解決。

請建議。

+0

ORDER BY FIELD(區域,4)[DESC],距離; ? – Strawberry 2013-04-05 12:32:42

+0

對不起沒有這個.. – 2013-04-05 12:36:27

+0

你可以發佈你想要的結果根據你的樣本? – Taryn 2013-04-05 12:47:04

回答

0
SELECT * 
    FROM zipcode 
ORDER 
    BY FIELD(state,4) DESC 
    , CASE WHEN state=4 THEN region END 
    , distance; 
+0

這工作絕對好......謝謝.... – 2013-04-08 05:16:45

0

可以使用CASE表達在ORDER BY

select code, state, region, distance 
from zipcode 
order by 
    case when state = 4 then region else distance end 

參見SQL Fiddle with Demo