SQL Order By:先指定值,再排序?
SQL Order By: Specific Value First, then Ordering?
我有一个 select 语句需要按两列对结果进行排序。我的问题是,当有特定值时,我只需要在第一列上应用排序。否则,我希望结果按第二列排序。
我敢肯定我的解释让大多数人感到困惑,所以这里有一个例子:在大多数情况下,我希望结果按 B 列(日期)DESC 排序。但是,在某些情况下,我需要在日期排序上方(或之前)显示记录。当 A 列(状态)的值为 'Needs Response' 时会发生这种情况。所以,如果 Status = 'Needs Response' 那么我需要它在结果的顶部,但是,如果它有任何其他值,它应该只在 DESC 顺序中按 Date 排序。
在尝试完成此操作时,我使用了 CASE 语句,但每次尝试都会导致所有结果按状态排序,然后 按日期排序。我需要的是当 Status 值 = 'Needs Response'.
时应用 only 的初始订单
Status | Date
---------------------------
Done | 11/25/2018
Done | 11/12/2018
Confirm | 10/10/2018
Needs Response | 12/5/2018
Acknowledge | 12/8/2018
Confirm | 12/1/2018
Needs Response | 11/24/2018
Confirm | 12/10/2018
使用上面的相同数据,无论我如何尝试,我总是先按状态排序数据,然后再按日期排序。使用 CASE 语句时,我能够将 'Needs Response' 置于结果的顶部,但其余记录仍按日期之前的状态排序。
我希望样本数据的结果是:
Status | Date
---------------------------
Needs Response | 12/5/2018
Needs Response | 11/24/2018
Confirm | 12/10/2018
Acknowledge | 12/8/2018
Confirm | 12/1/2018
Done | 11/25/2018
Done | 11/12/2018
Confirm | 10/10/2018
使用 case
表达式将 Needs Response 行放在第一位。然后按日期降序排列:
order by case when status = 'Needs Response' then 0 else 1 end, date desc
您应该可以使用 ORDER BY
子句来管理它,例如:
ORDER BY
CASE WHEN Status = 'Needs Response' THEN 0 ELSE 1 END,
Date desc
所以基本上你会用两个字段排序:
首先,当 Status
的值为 Needs Response
时,计算值为 0
;在所有其他情况下,它应该显示 1
。这将允许 Need Response
状态首先出现,而所有其他值将具有相同的值,从而导致以下排序字段发挥作用
然后Date
我有一个 select 语句需要按两列对结果进行排序。我的问题是,当有特定值时,我只需要在第一列上应用排序。否则,我希望结果按第二列排序。
我敢肯定我的解释让大多数人感到困惑,所以这里有一个例子:在大多数情况下,我希望结果按 B 列(日期)DESC 排序。但是,在某些情况下,我需要在日期排序上方(或之前)显示记录。当 A 列(状态)的值为 'Needs Response' 时会发生这种情况。所以,如果 Status = 'Needs Response' 那么我需要它在结果的顶部,但是,如果它有任何其他值,它应该只在 DESC 顺序中按 Date 排序。
在尝试完成此操作时,我使用了 CASE 语句,但每次尝试都会导致所有结果按状态排序,然后 按日期排序。我需要的是当 Status 值 = 'Needs Response'.
时应用 only 的初始订单Status | Date
---------------------------
Done | 11/25/2018
Done | 11/12/2018
Confirm | 10/10/2018
Needs Response | 12/5/2018
Acknowledge | 12/8/2018
Confirm | 12/1/2018
Needs Response | 11/24/2018
Confirm | 12/10/2018
使用上面的相同数据,无论我如何尝试,我总是先按状态排序数据,然后再按日期排序。使用 CASE 语句时,我能够将 'Needs Response' 置于结果的顶部,但其余记录仍按日期之前的状态排序。
我希望样本数据的结果是:
Status | Date
---------------------------
Needs Response | 12/5/2018
Needs Response | 11/24/2018
Confirm | 12/10/2018
Acknowledge | 12/8/2018
Confirm | 12/1/2018
Done | 11/25/2018
Done | 11/12/2018
Confirm | 10/10/2018
使用 case
表达式将 Needs Response 行放在第一位。然后按日期降序排列:
order by case when status = 'Needs Response' then 0 else 1 end, date desc
您应该可以使用 ORDER BY
子句来管理它,例如:
ORDER BY
CASE WHEN Status = 'Needs Response' THEN 0 ELSE 1 END,
Date desc
所以基本上你会用两个字段排序:
首先,当
Status
的值为Needs Response
时,计算值为0
;在所有其他情况下,它应该显示1
。这将允许Need Response
状态首先出现,而所有其他值将具有相同的值,从而导致以下排序字段发挥作用然后
Date