在 ORDER BY 中使用 CASE 将一些记录推送到最后



我通常使用一个结构,有点像:

ORDER BY CASE WHEN Location = 'ROOT' THEN '~' ELSE Location END

在 ASCII 环境中,这会成功地将所有LocationROOT 的记录推送到末尾,而所有其他记录则正常排序。这是因为"~"字符接近字符集的末尾。但是,随着比 ASCII 更普遍地使用字符集更宽的数据库,我预计这种技术偶尔会不起作用。

还有什么选择?具体来说,我想要一种技术,可以将字段中具有特定值的记录推送到列表的末尾。

我主要使用MS SQL,但我也会对通用技术和与Oracle一起使用的技术感兴趣。

要将带有Location = 'ROOT'的值推到最后,请尝试以下操作:

ORDER BY CASE WHEN Location = 'ROOT' THEN 1 ELSE 0 END, Location 
ORDER BY CASE WHEN Location = 'ROOT' THEN 1 ELSE 0 END, Location

最新更新