0

我有这样的条件查询:

  • 如果列(顺序)不为 0,则按值 1 到 99999(最大值)排序
  • 我需要按姓氏顺序排列所有 0。

所以如果我有一张这样的桌子

ID   Order     Last Name
1     0        Manner
2     1        Brock
3     0        Lester
4     0        Annual
5     0        Greatly

期望的结果是:

Brock
Annual
Greatly
Lester
Manner

这是我的查询。每次发生的事情是我得到姓氏排序,而不是非顺序 0 首先出现:

select c.last_name
from person_reports crt 
join person c 
where c.org_id = 1000 and crt.reports_to_id = 100389 and c.id = crt.contact_id 
order by c.last_name, case preference_num when 0 then 9999999 else preference_num end

我目前的工作成果:

Annual
Brock
Greatly
Lester
Manner

谢谢你的帮助

4

1 回答 1

3

您可以简单地将 ORDER BY 子句反转为:

order by case preference_num when 0 then 9999999 else preference_num end, c.last_name

如果在开头再添加一个段,则可以避免使用魔术“9999999”:

order by case preference_num when 0 then 1 else 0 end, preference_num, c.last_name
于 2012-08-29T03:23:03.047 回答