-2

我有一个看起来像这样的表格邮政编码

  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 区域,但其余数据也按状态和区域排序,这需要修复。

请建议。

4

2 回答 2

0

您可以在您的:中使用CASE表达式ORDER BY

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

请参阅带有演示的 SQL Fiddle

于 2013-04-05T13:03:31.690 回答
0
SELECT * 
  FROM zipcode 
 ORDER  
    BY FIELD(state,4) DESC
     , CASE WHEN state=4 THEN region END
     , distance;
于 2013-04-05T16:12:16.590 回答